// Copyright 2011, Vanya Davidenko.
// Кодировка файла: UTF-8. 
package info.iu9;
import info.iu9.interval_tree.IntInterval;
import info.iu9.interval_tree.IntervalTree;

import java.util.*;



// @sa http://www.regular-expressions.info/unicode.html
public class UnicodeMap {
  // Получение списка интервало для блока/алфавита/свойства s.
  // Результат может быть пустым, в таком случае считается, что s — корректно,
  // но обозначает пустое множество.
  // Метод возвращает null, если с таким названием в таблицах ничего не найдено.
  //
  // Передаваемая строка может иметь префиксы-подсказки:
  //  - In, если далее следует название блока
  //  - Is, если далее следует название алфавита.
  // Если префикса нет, производится поиск во всех таблицах, кроме блоков.
  //
  // Таблицы сгенерированы python-скриптами по актуальным данным с unicode.org.
  public static List<IntInterval> get(final String s) {
    final String norm_s = normalizeName(s);

    if ( norm_s.startsWith("In") ) {
      return blocks_.get(norm_s.substring(2));

    } else if ( norm_s.startsWith("Is") ) {
      return scripts_.get(norm_s.substring(2));

    } else {
      final List<IntInterval> rs = scripts_.get(norm_s);
      if ( rs != null ) { return rs; }

      final List<IntInterval> rp = properties_.get(norm_s);
      if ( rp != null ) { return rp; }

      if ( properties_aliases_.containsKey(norm_s) ) {
        final List<IntInterval> rpa = new ArrayList<IntInterval>();
        for ( final String property : properties_aliases_.get(norm_s) ) {
          rpa.addAll(properties_.get(property));
        }
        return rpa;
      }

      return null;
    }
  }


  private static String normalizeName(final String s) {
    return s.replaceAll("[-_ ]", "").toLowerCase(Locale.US);
  }


  private static void addBlock(final String s, final List<IntInterval> i) {
    final String norm_s = normalizeName(s);
    assert !blocks_.containsKey(norm_s);
    blocks_.put(norm_s, i);
  }


  private static void addScript(final String s, final List<IntInterval> l) {
    assert !scripts_.containsKey(s);
    final String norm_s = normalizeName(s);

    final IntervalTree it = new IntervalTree();
    for ( final IntInterval i : l ) {
      it.insert(i);
    }

    it.shrink();

    final List<IntInterval> l_shrunk = new ArrayList<IntInterval>(it.size());
    for ( final IntInterval i : it ) {
       l_shrunk.add(i);
    }

    scripts_.put(norm_s,  l_shrunk);
  }


  private static void addProperty(final String s, final List<IntInterval> l) {
    assert s.length() == 2;
    assert !properties_.containsKey(s);
    final String norm_s = normalizeName(s);

    final IntervalTree it = new IntervalTree();
    for ( final IntInterval i : l ) {
      it.insert(i);
    }

    it.shrink();

    final List<IntInterval> l_shrunk = new ArrayList<IntInterval>(it.size());
    for ( final IntInterval i : it ) {
       l_shrunk.add(i);
    }

    assert !properties_.containsKey(norm_s);
    properties_.put(norm_s, l_shrunk);
  }


  private static void addPropertyAlias(final String s, final List<String> l) {
    final String norm_s = normalizeName(s);
    final List<String> norm_l = new ArrayList<String>();
    for ( final String ls : l ) {
      final String norm_ls = normalizeName(ls);
      assert properties_.containsKey(norm_ls);
      norm_l.add(norm_ls);
    }
    assert !properties_aliases_.containsKey(norm_s);
    properties_aliases_.put(norm_s, norm_l);
  }


  // Для сокращения размера кода.
  private static IntInterval I(final int min, final int max) {
    return new IntInterval(min, max);
  }


  // Блок — всегда один интервал.
  private static final Map<String, List<IntInterval>> blocks_ =
    new HashMap<String, List<IntInterval>>();

  // Алфавит — набор интервалов. addScript пытается объеденить, те, что можно.
  private static final Map<String, List<IntInterval>> scripts_ =
    new HashMap<String, List<IntInterval>>();

  // Каждый символ имеет несколько свойств (например: печатный, цифра ...).
  private static final Map<String, List<IntInterval>> properties_ =
      new HashMap<String, List<IntInterval>>();

  // Для всех свойств существуют синонимы, более удобные для человека
  // (более длинные или наоборот однобуквенные),
  // например для "Separator" для "Z".
  // Некоторые синонимы объединяют сразу несколько групп:
  // "L" или "Letter" для ("Ll", "Lu", "Lt", "Lo", "Lo").
  private static final Map<String, List<String>> properties_aliases_ =
      new HashMap<String, List<String>>();



  // generated by generate_unicode_blocks.py
  private static void initBlocks() {
    addBlock("Aegean Numbers", Arrays.asList(I(0x10100, 0x1013F)));
    addBlock("Alchemical Symbols", Arrays.asList(I(0x1F700, 0x1F77F)));
    addBlock("Alphabetic Presentation Forms", Arrays.asList(I(0xFB00, 0xFB4F)));
    addBlock("Ancient Greek Musical Notation", Arrays.asList(I(0x1D200, 0x1D24F)));
    addBlock("Ancient Greek Numbers", Arrays.asList(I(0x10140, 0x1018F)));
    addBlock("Ancient Symbols", Arrays.asList(I(0x10190, 0x101CF)));
    addBlock("Arabic Presentation Forms-A", Arrays.asList(I(0xFB50, 0xFDFF)));
    addBlock("Arabic Presentation Forms-B", Arrays.asList(I(0xFE70, 0xFEFF)));
    addBlock("Arabic Supplement", Arrays.asList(I(0x0750, 0x077F)));
    addBlock("Arabic", Arrays.asList(I(0x0600, 0x06FF)));
    addBlock("Armenian", Arrays.asList(I(0x0530, 0x058F)));
    addBlock("Arrows", Arrays.asList(I(0x2190, 0x21FF)));
    addBlock("Avestan", Arrays.asList(I(0x10B00, 0x10B3F)));
    addBlock("Balinese", Arrays.asList(I(0x1B00, 0x1B7F)));
    addBlock("Bamum Supplement", Arrays.asList(I(0x16800, 0x16A3F)));
    addBlock("Bamum", Arrays.asList(I(0xA6A0, 0xA6FF)));
    addBlock("Basic Latin", Arrays.asList(I(0x0000, 0x007F)));
    addBlock("Batak", Arrays.asList(I(0x1BC0, 0x1BFF)));
    addBlock("Bengali", Arrays.asList(I(0x0980, 0x09FF)));
    addBlock("Block Elements", Arrays.asList(I(0x2580, 0x259F)));
    addBlock("Bopomofo Extended", Arrays.asList(I(0x31A0, 0x31BF)));
    addBlock("Bopomofo", Arrays.asList(I(0x3100, 0x312F)));
    addBlock("Box Drawing", Arrays.asList(I(0x2500, 0x257F)));
    addBlock("Brahmi", Arrays.asList(I(0x11000, 0x1107F)));
    addBlock("Braille Patterns", Arrays.asList(I(0x2800, 0x28FF)));
    addBlock("Buginese", Arrays.asList(I(0x1A00, 0x1A1F)));
    addBlock("Buhid", Arrays.asList(I(0x1740, 0x175F)));
    addBlock("Byzantine Musical Symbols", Arrays.asList(I(0x1D000, 0x1D0FF)));
    addBlock("CJK Compatibility Forms", Arrays.asList(I(0xFE30, 0xFE4F)));
    addBlock("CJK Compatibility Ideographs Supplement", Arrays.asList(I(0x2F800, 0x2FA1F)));
    addBlock("CJK Compatibility Ideographs", Arrays.asList(I(0xF900, 0xFAFF)));
    addBlock("CJK Compatibility", Arrays.asList(I(0x3300, 0x33FF)));
    addBlock("CJK Radicals Supplement", Arrays.asList(I(0x2E80, 0x2EFF)));
    addBlock("CJK Strokes", Arrays.asList(I(0x31C0, 0x31EF)));
    addBlock("CJK Symbols and Punctuation", Arrays.asList(I(0x3000, 0x303F)));
    addBlock("CJK Unified Ideographs Extension A", Arrays.asList(I(0x3400, 0x4DBF)));
    addBlock("CJK Unified Ideographs Extension B", Arrays.asList(I(0x20000, 0x2A6DF)));
    addBlock("CJK Unified Ideographs Extension C", Arrays.asList(I(0x2A700, 0x2B73F)));
    addBlock("CJK Unified Ideographs Extension D", Arrays.asList(I(0x2B740, 0x2B81F)));
    addBlock("CJK Unified Ideographs", Arrays.asList(I(0x4E00, 0x9FFF)));
    addBlock("Carian", Arrays.asList(I(0x102A0, 0x102DF)));
    addBlock("Cham", Arrays.asList(I(0xAA00, 0xAA5F)));
    addBlock("Cherokee", Arrays.asList(I(0x13A0, 0x13FF)));
    addBlock("Combining Diacritical Marks Supplement", Arrays.asList(I(0x1DC0, 0x1DFF)));
    addBlock("Combining Diacritical Marks for Symbols", Arrays.asList(I(0x20D0, 0x20FF)));
    addBlock("Combining Diacritical Marks", Arrays.asList(I(0x0300, 0x036F)));
    addBlock("Combining Half Marks", Arrays.asList(I(0xFE20, 0xFE2F)));
    addBlock("Common Indic Number Forms", Arrays.asList(I(0xA830, 0xA83F)));
    addBlock("Control Pictures", Arrays.asList(I(0x2400, 0x243F)));
    addBlock("Coptic", Arrays.asList(I(0x2C80, 0x2CFF)));
    addBlock("Counting Rod Numerals", Arrays.asList(I(0x1D360, 0x1D37F)));
    addBlock("Cuneiform Numbers and Punctuation", Arrays.asList(I(0x12400, 0x1247F)));
    addBlock("Cuneiform", Arrays.asList(I(0x12000, 0x123FF)));
    addBlock("Currency Symbols", Arrays.asList(I(0x20A0, 0x20CF)));
    addBlock("Cypriot Syllabary", Arrays.asList(I(0x10800, 0x1083F)));
    addBlock("Cyrillic Extended-A", Arrays.asList(I(0x2DE0, 0x2DFF)));
    addBlock("Cyrillic Extended-B", Arrays.asList(I(0xA640, 0xA69F)));
    addBlock("Cyrillic Supplement", Arrays.asList(I(0x0500, 0x052F)));
    addBlock("Cyrillic", Arrays.asList(I(0x0400, 0x04FF)));
    addBlock("Deseret", Arrays.asList(I(0x10400, 0x1044F)));
    addBlock("Devanagari Extended", Arrays.asList(I(0xA8E0, 0xA8FF)));
    addBlock("Devanagari", Arrays.asList(I(0x0900, 0x097F)));
    addBlock("Dingbats", Arrays.asList(I(0x2700, 0x27BF)));
    addBlock("Domino Tiles", Arrays.asList(I(0x1F030, 0x1F09F)));
    addBlock("Egyptian Hieroglyphs", Arrays.asList(I(0x13000, 0x1342F)));
    addBlock("Emoticons", Arrays.asList(I(0x1F600, 0x1F64F)));
    addBlock("Enclosed Alphanumeric Supplement", Arrays.asList(I(0x1F100, 0x1F1FF)));
    addBlock("Enclosed Alphanumerics", Arrays.asList(I(0x2460, 0x24FF)));
    addBlock("Enclosed CJK Letters and Months", Arrays.asList(I(0x3200, 0x32FF)));
    addBlock("Enclosed Ideographic Supplement", Arrays.asList(I(0x1F200, 0x1F2FF)));
    addBlock("Ethiopic Extended", Arrays.asList(I(0x2D80, 0x2DDF)));
    addBlock("Ethiopic Extended-A", Arrays.asList(I(0xAB00, 0xAB2F)));
    addBlock("Ethiopic Supplement", Arrays.asList(I(0x1380, 0x139F)));
    addBlock("Ethiopic", Arrays.asList(I(0x1200, 0x137F)));
    addBlock("General Punctuation", Arrays.asList(I(0x2000, 0x206F)));
    addBlock("Geometric Shapes", Arrays.asList(I(0x25A0, 0x25FF)));
    addBlock("Georgian Supplement", Arrays.asList(I(0x2D00, 0x2D2F)));
    addBlock("Georgian", Arrays.asList(I(0x10A0, 0x10FF)));
    addBlock("Glagolitic", Arrays.asList(I(0x2C00, 0x2C5F)));
    addBlock("Gothic", Arrays.asList(I(0x10330, 0x1034F)));
    addBlock("Greek Extended", Arrays.asList(I(0x1F00, 0x1FFF)));
    addBlock("Greek and Coptic", Arrays.asList(I(0x0370, 0x03FF)));
    addBlock("Gujarati", Arrays.asList(I(0x0A80, 0x0AFF)));
    addBlock("Gurmukhi", Arrays.asList(I(0x0A00, 0x0A7F)));
    addBlock("Halfwidth and Fullwidth Forms", Arrays.asList(I(0xFF00, 0xFFEF)));
    addBlock("Hangul Compatibility Jamo", Arrays.asList(I(0x3130, 0x318F)));
    addBlock("Hangul Jamo Extended-A", Arrays.asList(I(0xA960, 0xA97F)));
    addBlock("Hangul Jamo Extended-B", Arrays.asList(I(0xD7B0, 0xD7FF)));
    addBlock("Hangul Jamo", Arrays.asList(I(0x1100, 0x11FF)));
    addBlock("Hangul Syllables", Arrays.asList(I(0xAC00, 0xD7AF)));
    addBlock("Hanunoo", Arrays.asList(I(0x1720, 0x173F)));
    addBlock("Hebrew", Arrays.asList(I(0x0590, 0x05FF)));
    addBlock("High Private Use Surrogates", Arrays.asList(I(0xDB80, 0xDBFF)));
    addBlock("High Surrogates", Arrays.asList(I(0xD800, 0xDB7F)));
    addBlock("Hiragana", Arrays.asList(I(0x3040, 0x309F)));
    addBlock("IPA Extensions", Arrays.asList(I(0x0250, 0x02AF)));
    addBlock("Ideographic Description Characters", Arrays.asList(I(0x2FF0, 0x2FFF)));
    addBlock("Imperial Aramaic", Arrays.asList(I(0x10840, 0x1085F)));
    addBlock("Inscriptional Pahlavi", Arrays.asList(I(0x10B60, 0x10B7F)));
    addBlock("Inscriptional Parthian", Arrays.asList(I(0x10B40, 0x10B5F)));
    addBlock("Javanese", Arrays.asList(I(0xA980, 0xA9DF)));
    addBlock("Kaithi", Arrays.asList(I(0x11080, 0x110CF)));
    addBlock("Kana Supplement", Arrays.asList(I(0x1B000, 0x1B0FF)));
    addBlock("Kanbun", Arrays.asList(I(0x3190, 0x319F)));
    addBlock("Kangxi Radicals", Arrays.asList(I(0x2F00, 0x2FDF)));
    addBlock("Kannada", Arrays.asList(I(0x0C80, 0x0CFF)));
    addBlock("Katakana Phonetic Extensions", Arrays.asList(I(0x31F0, 0x31FF)));
    addBlock("Katakana", Arrays.asList(I(0x30A0, 0x30FF)));
    addBlock("Kayah Li", Arrays.asList(I(0xA900, 0xA92F)));
    addBlock("Kharoshthi", Arrays.asList(I(0x10A00, 0x10A5F)));
    addBlock("Khmer Symbols", Arrays.asList(I(0x19E0, 0x19FF)));
    addBlock("Khmer", Arrays.asList(I(0x1780, 0x17FF)));
    addBlock("Lao", Arrays.asList(I(0x0E80, 0x0EFF)));
    addBlock("Latin Extended Additional", Arrays.asList(I(0x1E00, 0x1EFF)));
    addBlock("Latin Extended-A", Arrays.asList(I(0x0100, 0x017F)));
    addBlock("Latin Extended-B", Arrays.asList(I(0x0180, 0x024F)));
    addBlock("Latin Extended-C", Arrays.asList(I(0x2C60, 0x2C7F)));
    addBlock("Latin Extended-D", Arrays.asList(I(0xA720, 0xA7FF)));
    addBlock("Latin-1 Supplement", Arrays.asList(I(0x0080, 0x00FF)));
    addBlock("Lepcha", Arrays.asList(I(0x1C00, 0x1C4F)));
    addBlock("Letterlike Symbols", Arrays.asList(I(0x2100, 0x214F)));
    addBlock("Limbu", Arrays.asList(I(0x1900, 0x194F)));
    addBlock("Linear B Ideograms", Arrays.asList(I(0x10080, 0x100FF)));
    addBlock("Linear B Syllabary", Arrays.asList(I(0x10000, 0x1007F)));
    addBlock("Lisu", Arrays.asList(I(0xA4D0, 0xA4FF)));
    addBlock("Low Surrogates", Arrays.asList(I(0xDC00, 0xDFFF)));
    addBlock("Lycian", Arrays.asList(I(0x10280, 0x1029F)));
    addBlock("Lydian", Arrays.asList(I(0x10920, 0x1093F)));
    addBlock("Mahjong Tiles", Arrays.asList(I(0x1F000, 0x1F02F)));
    addBlock("Malayalam", Arrays.asList(I(0x0D00, 0x0D7F)));
    addBlock("Mandaic", Arrays.asList(I(0x0840, 0x085F)));
    addBlock("Mathematical Alphanumeric Symbols", Arrays.asList(I(0x1D400, 0x1D7FF)));
    addBlock("Mathematical Operators", Arrays.asList(I(0x2200, 0x22FF)));
    addBlock("Meetei Mayek", Arrays.asList(I(0xABC0, 0xABFF)));
    addBlock("Miscellaneous Mathematical Symbols-A", Arrays.asList(I(0x27C0, 0x27EF)));
    addBlock("Miscellaneous Mathematical Symbols-B", Arrays.asList(I(0x2980, 0x29FF)));
    addBlock("Miscellaneous Symbols And Pictographs", Arrays.asList(I(0x1F300, 0x1F5FF)));
    addBlock("Miscellaneous Symbols and Arrows", Arrays.asList(I(0x2B00, 0x2BFF)));
    addBlock("Miscellaneous Symbols", Arrays.asList(I(0x2600, 0x26FF)));
    addBlock("Miscellaneous Technical", Arrays.asList(I(0x2300, 0x23FF)));
    addBlock("Modifier Tone Letters", Arrays.asList(I(0xA700, 0xA71F)));
    addBlock("Mongolian", Arrays.asList(I(0x1800, 0x18AF)));
    addBlock("Musical Symbols", Arrays.asList(I(0x1D100, 0x1D1FF)));
    addBlock("Myanmar Extended-A", Arrays.asList(I(0xAA60, 0xAA7F)));
    addBlock("Myanmar", Arrays.asList(I(0x1000, 0x109F)));
    addBlock("NKo", Arrays.asList(I(0x07C0, 0x07FF)));
    addBlock("New Tai Lue", Arrays.asList(I(0x1980, 0x19DF)));
    addBlock("Number Forms", Arrays.asList(I(0x2150, 0x218F)));
    addBlock("Ogham", Arrays.asList(I(0x1680, 0x169F)));
    addBlock("Ol Chiki", Arrays.asList(I(0x1C50, 0x1C7F)));
    addBlock("Old Italic", Arrays.asList(I(0x10300, 0x1032F)));
    addBlock("Old Persian", Arrays.asList(I(0x103A0, 0x103DF)));
    addBlock("Old South Arabian", Arrays.asList(I(0x10A60, 0x10A7F)));
    addBlock("Old Turkic", Arrays.asList(I(0x10C00, 0x10C4F)));
    addBlock("Optical Character Recognition", Arrays.asList(I(0x2440, 0x245F)));
    addBlock("Oriya", Arrays.asList(I(0x0B00, 0x0B7F)));
    addBlock("Osmanya", Arrays.asList(I(0x10480, 0x104AF)));
    addBlock("Phags-pa", Arrays.asList(I(0xA840, 0xA87F)));
    addBlock("Phaistos Disc", Arrays.asList(I(0x101D0, 0x101FF)));
    addBlock("Phoenician", Arrays.asList(I(0x10900, 0x1091F)));
    addBlock("Phonetic Extensions Supplement", Arrays.asList(I(0x1D80, 0x1DBF)));
    addBlock("Phonetic Extensions", Arrays.asList(I(0x1D00, 0x1D7F)));
    addBlock("Playing Cards", Arrays.asList(I(0x1F0A0, 0x1F0FF)));
    addBlock("Private Use Area", Arrays.asList(I(0xE000, 0xF8FF)));
    addBlock("Rejang", Arrays.asList(I(0xA930, 0xA95F)));
    addBlock("Rumi Numeral Symbols", Arrays.asList(I(0x10E60, 0x10E7F)));
    addBlock("Runic", Arrays.asList(I(0x16A0, 0x16FF)));
    addBlock("Samaritan", Arrays.asList(I(0x0800, 0x083F)));
    addBlock("Saurashtra", Arrays.asList(I(0xA880, 0xA8DF)));
    addBlock("Shavian", Arrays.asList(I(0x10450, 0x1047F)));
    addBlock("Sinhala", Arrays.asList(I(0x0D80, 0x0DFF)));
    addBlock("Small Form Variants", Arrays.asList(I(0xFE50, 0xFE6F)));
    addBlock("Spacing Modifier Letters", Arrays.asList(I(0x02B0, 0x02FF)));
    addBlock("Specials", Arrays.asList(I(0xFFF0, 0xFFFF)));
    addBlock("Sundanese", Arrays.asList(I(0x1B80, 0x1BBF)));
    addBlock("Superscripts and Subscripts", Arrays.asList(I(0x2070, 0x209F)));
    addBlock("Supplemental Arrows-A", Arrays.asList(I(0x27F0, 0x27FF)));
    addBlock("Supplemental Arrows-B", Arrays.asList(I(0x2900, 0x297F)));
    addBlock("Supplemental Mathematical Operators", Arrays.asList(I(0x2A00, 0x2AFF)));
    addBlock("Supplemental Punctuation", Arrays.asList(I(0x2E00, 0x2E7F)));
    addBlock("Supplementary Private Use Area-A", Arrays.asList(I(0xF0000, 0xFFFFF)));
    addBlock("Supplementary Private Use Area-B", Arrays.asList(I(0x100000, 0x10FFFF)));
    addBlock("Syloti Nagri", Arrays.asList(I(0xA800, 0xA82F)));
    addBlock("Syriac", Arrays.asList(I(0x0700, 0x074F)));
    addBlock("Tagalog", Arrays.asList(I(0x1700, 0x171F)));
    addBlock("Tagbanwa", Arrays.asList(I(0x1760, 0x177F)));
    addBlock("Tags", Arrays.asList(I(0xE0000, 0xE007F)));
    addBlock("Tai Le", Arrays.asList(I(0x1950, 0x197F)));
    addBlock("Tai Tham", Arrays.asList(I(0x1A20, 0x1AAF)));
    addBlock("Tai Viet", Arrays.asList(I(0xAA80, 0xAADF)));
    addBlock("Tai Xuan Jing Symbols", Arrays.asList(I(0x1D300, 0x1D35F)));
    addBlock("Tamil", Arrays.asList(I(0x0B80, 0x0BFF)));
    addBlock("Telugu", Arrays.asList(I(0x0C00, 0x0C7F)));
    addBlock("Thaana", Arrays.asList(I(0x0780, 0x07BF)));
    addBlock("Thai", Arrays.asList(I(0x0E00, 0x0E7F)));
    addBlock("Tibetan", Arrays.asList(I(0x0F00, 0x0FFF)));
    addBlock("Tifinagh", Arrays.asList(I(0x2D30, 0x2D7F)));
    addBlock("Transport And Map Symbols", Arrays.asList(I(0x1F680, 0x1F6FF)));
    addBlock("Ugaritic", Arrays.asList(I(0x10380, 0x1039F)));
    addBlock("Unified Canadian Aboriginal Syllabics Extended", Arrays.asList(I(0x18B0, 0x18FF)));
    addBlock("Unified Canadian Aboriginal Syllabics", Arrays.asList(I(0x1400, 0x167F)));
    addBlock("Vai", Arrays.asList(I(0xA500, 0xA63F)));
    addBlock("Variation Selectors Supplement", Arrays.asList(I(0xE0100, 0xE01EF)));
    addBlock("Variation Selectors", Arrays.asList(I(0xFE00, 0xFE0F)));
    addBlock("Vedic Extensions", Arrays.asList(I(0x1CD0, 0x1CFF)));
    addBlock("Vertical Forms", Arrays.asList(I(0xFE10, 0xFE1F)));
    addBlock("Yi Radicals", Arrays.asList(I(0xA490, 0xA4CF)));
    addBlock("Yi Syllables", Arrays.asList(I(0xA000, 0xA48F)));
    addBlock("Yijing Hexagram Symbols", Arrays.asList(I(0x4DC0, 0x4DFF)));
  }


  // generated by generate_unicode_scripts.py
  private static void initStripts() {
    addScript("Arabic", Arrays.asList(I(0x0600, 0x0603), I(0x0606, 0x0608), I(0x0609, 0x060A), I(0x060B, 0x060B), I(0x060D, 0x060D), I(0x060E, 0x060F), I(0x0610, 0x061A), I(0x061E, 0x061E), I(0x0620, 0x063F), I(0x0641, 0x064A), I(0x0656, 0x065E), I(0x066A, 0x066D), I(0x066E, 0x066F), I(0x0671, 0x06D3), I(0x06D4, 0x06D4), I(0x06D5, 0x06D5), I(0x06D6, 0x06DC), I(0x06DE, 0x06DE), I(0x06DF, 0x06E4), I(0x06E5, 0x06E6), I(0x06E7, 0x06E8), I(0x06E9, 0x06E9), I(0x06EA, 0x06ED), I(0x06EE, 0x06EF), I(0x06F0, 0x06F9), I(0x06FA, 0x06FC), I(0x06FD, 0x06FE), I(0x06FF, 0x06FF), I(0x0750, 0x077F), I(0xFB50, 0xFBB1), I(0xFBB2, 0xFBC1), I(0xFBD3, 0xFD3D), I(0xFD50, 0xFD8F), I(0xFD92, 0xFDC7), I(0xFDF0, 0xFDFB), I(0xFDFC, 0xFDFC), I(0xFE70, 0xFE74), I(0xFE76, 0xFEFC), I(0x10E60, 0x10E7E)));
    addScript("Armenian", Arrays.asList(I(0x0531, 0x0556), I(0x0559, 0x0559), I(0x055A, 0x055F), I(0x0561, 0x0587), I(0x058A, 0x058A), I(0xFB13, 0xFB17)));
    addScript("Avestan", Arrays.asList(I(0x10B00, 0x10B35), I(0x10B39, 0x10B3F)));
    addScript("Balinese", Arrays.asList(I(0x1B00, 0x1B03), I(0x1B04, 0x1B04), I(0x1B05, 0x1B33), I(0x1B34, 0x1B34), I(0x1B35, 0x1B35), I(0x1B36, 0x1B3A), I(0x1B3B, 0x1B3B), I(0x1B3C, 0x1B3C), I(0x1B3D, 0x1B41), I(0x1B42, 0x1B42), I(0x1B43, 0x1B44), I(0x1B45, 0x1B4B), I(0x1B50, 0x1B59), I(0x1B5A, 0x1B60), I(0x1B61, 0x1B6A), I(0x1B6B, 0x1B73), I(0x1B74, 0x1B7C)));
    addScript("Bamum", Arrays.asList(I(0xA6A0, 0xA6E5), I(0xA6E6, 0xA6EF), I(0xA6F0, 0xA6F1), I(0xA6F2, 0xA6F7), I(0x16800, 0x16A38)));
    addScript("Batak", Arrays.asList(I(0x1BC0, 0x1BE5), I(0x1BE6, 0x1BE6), I(0x1BE7, 0x1BE7), I(0x1BE8, 0x1BE9), I(0x1BEA, 0x1BEC), I(0x1BED, 0x1BED), I(0x1BEE, 0x1BEE), I(0x1BEF, 0x1BF1), I(0x1BF2, 0x1BF3), I(0x1BFC, 0x1BFF)));
    addScript("Bengali", Arrays.asList(I(0x0981, 0x0981), I(0x0982, 0x0983), I(0x0985, 0x098C), I(0x098F, 0x0990), I(0x0993, 0x09A8), I(0x09AA, 0x09B0), I(0x09B2, 0x09B2), I(0x09B6, 0x09B9), I(0x09BC, 0x09BC), I(0x09BD, 0x09BD), I(0x09BE, 0x09C0), I(0x09C1, 0x09C4), I(0x09C7, 0x09C8), I(0x09CB, 0x09CC), I(0x09CD, 0x09CD), I(0x09CE, 0x09CE), I(0x09D7, 0x09D7), I(0x09DC, 0x09DD), I(0x09DF, 0x09E1), I(0x09E2, 0x09E3), I(0x09E6, 0x09EF), I(0x09F0, 0x09F1), I(0x09F2, 0x09F3), I(0x09F4, 0x09F9), I(0x09FA, 0x09FA), I(0x09FB, 0x09FB)));
    addScript("Bopomofo", Arrays.asList(I(0x02EA, 0x02EB), I(0x3105, 0x312D), I(0x31A0, 0x31BA)));
    addScript("Brahmi", Arrays.asList(I(0x11000, 0x11000), I(0x11001, 0x11001), I(0x11002, 0x11002), I(0x11003, 0x11037), I(0x11038, 0x11046), I(0x11047, 0x1104D), I(0x11052, 0x11065), I(0x11066, 0x1106F)));
    addScript("Braille", Arrays.asList(I(0x2800, 0x28FF)));
    addScript("Buginese", Arrays.asList(I(0x1A00, 0x1A16), I(0x1A17, 0x1A18), I(0x1A19, 0x1A1B), I(0x1A1E, 0x1A1F)));
    addScript("Buhid", Arrays.asList(I(0x1740, 0x1751), I(0x1752, 0x1753)));
    addScript("Canadian_Aboriginal", Arrays.asList(I(0x1400, 0x1400), I(0x1401, 0x166C), I(0x166D, 0x166E), I(0x166F, 0x167F), I(0x18B0, 0x18F5)));
    addScript("Carian", Arrays.asList(I(0x102A0, 0x102D0)));
    addScript("Cham", Arrays.asList(I(0xAA00, 0xAA28), I(0xAA29, 0xAA2E), I(0xAA2F, 0xAA30), I(0xAA31, 0xAA32), I(0xAA33, 0xAA34), I(0xAA35, 0xAA36), I(0xAA40, 0xAA42), I(0xAA43, 0xAA43), I(0xAA44, 0xAA4B), I(0xAA4C, 0xAA4C), I(0xAA4D, 0xAA4D), I(0xAA50, 0xAA59), I(0xAA5C, 0xAA5F)));
    addScript("Cherokee", Arrays.asList(I(0x13A0, 0x13F4)));
    addScript("Common", Arrays.asList(I(0x0000, 0x001F), I(0x0020, 0x0020), I(0x0021, 0x0023), I(0x0024, 0x0024), I(0x0025, 0x0027), I(0x0028, 0x0028), I(0x0029, 0x0029), I(0x002A, 0x002A), I(0x002B, 0x002B), I(0x002C, 0x002C), I(0x002D, 0x002D), I(0x002E, 0x002F), I(0x0030, 0x0039), I(0x003A, 0x003B), I(0x003C, 0x003E), I(0x003F, 0x0040), I(0x005B, 0x005B), I(0x005C, 0x005C), I(0x005D, 0x005D), I(0x005E, 0x005E), I(0x005F, 0x005F), I(0x0060, 0x0060), I(0x007B, 0x007B), I(0x007C, 0x007C), I(0x007D, 0x007D), I(0x007E, 0x007E), I(0x007F, 0x009F), I(0x00A0, 0x00A0), I(0x00A1, 0x00A1), I(0x00A2, 0x00A5), I(0x00A6, 0x00A7), I(0x00A8, 0x00A8), I(0x00A9, 0x00A9), I(0x00AB, 0x00AB), I(0x00AC, 0x00AC), I(0x00AD, 0x00AD), I(0x00AE, 0x00AE), I(0x00AF, 0x00AF), I(0x00B0, 0x00B0), I(0x00B1, 0x00B1), I(0x00B2, 0x00B3), I(0x00B4, 0x00B4), I(0x00B5, 0x00B5), I(0x00B6, 0x00B6), I(0x00B7, 0x00B7), I(0x00B8, 0x00B8), I(0x00B9, 0x00B9), I(0x00BB, 0x00BB), I(0x00BC, 0x00BE), I(0x00BF, 0x00BF), I(0x00D7, 0x00D7), I(0x00F7, 0x00F7), I(0x02B9, 0x02C1), I(0x02C2, 0x02C5), I(0x02C6, 0x02D1), I(0x02D2, 0x02DF), I(0x02E5, 0x02E9), I(0x02EC, 0x02EC), I(0x02ED, 0x02ED), I(0x02EE, 0x02EE), I(0x02EF, 0x02FF), I(0x0374, 0x0374), I(0x037E, 0x037E), I(0x0385, 0x0385), I(0x0387, 0x0387), I(0x0589, 0x0589), I(0x060C, 0x060C), I(0x061B, 0x061B), I(0x061F, 0x061F), I(0x0640, 0x0640), I(0x0660, 0x0669), I(0x06DD, 0x06DD), I(0x0964, 0x0965), I(0x0970, 0x0970), I(0x0E3F, 0x0E3F), I(0x0FD5, 0x0FD8), I(0x10FB, 0x10FB), I(0x16EB, 0x16ED), I(0x1735, 0x1736), I(0x1802, 0x1803), I(0x1805, 0x1805), I(0x1CD3, 0x1CD3), I(0x1CE1, 0x1CE1), I(0x1CE9, 0x1CEC), I(0x1CEE, 0x1CF1), I(0x1CF2, 0x1CF2), I(0x2000, 0x200A), I(0x200B, 0x200B), I(0x200E, 0x200F), I(0x2010, 0x2015), I(0x2016, 0x2017), I(0x2018, 0x2018), I(0x2019, 0x2019), I(0x201A, 0x201A), I(0x201B, 0x201C), I(0x201D, 0x201D), I(0x201E, 0x201E), I(0x201F, 0x201F), I(0x2020, 0x2027), I(0x2028, 0x2028), I(0x2029, 0x2029), I(0x202A, 0x202E), I(0x202F, 0x202F), I(0x2030, 0x2038), I(0x2039, 0x2039), I(0x203A, 0x203A), I(0x203B, 0x203E), I(0x203F, 0x2040), I(0x2041, 0x2043), I(0x2044, 0x2044), I(0x2045, 0x2045), I(0x2046, 0x2046), I(0x2047, 0x2051), I(0x2052, 0x2052), I(0x2053, 0x2053), I(0x2054, 0x2054), I(0x2055, 0x205E), I(0x205F, 0x205F), I(0x2060, 0x2064), I(0x206A, 0x206F), I(0x2070, 0x2070), I(0x2074, 0x2079), I(0x207A, 0x207C), I(0x207D, 0x207D), I(0x207E, 0x207E), I(0x2080, 0x2089), I(0x208A, 0x208C), I(0x208D, 0x208D), I(0x208E, 0x208E), I(0x20A0, 0x20B9), I(0x2100, 0x2101), I(0x2102, 0x2102), I(0x2103, 0x2106), I(0x2107, 0x2107), I(0x2108, 0x2109), I(0x210A, 0x2113), I(0x2114, 0x2114), I(0x2115, 0x2115), I(0x2116, 0x2117), I(0x2118, 0x2118), I(0x2119, 0x211D), I(0x211E, 0x2123), I(0x2124, 0x2124), I(0x2125, 0x2125), I(0x2127, 0x2127), I(0x2128, 0x2128), I(0x2129, 0x2129), I(0x212C, 0x212D), I(0x212E, 0x212E), I(0x212F, 0x2131), I(0x2133, 0x2134), I(0x2135, 0x2138), I(0x2139, 0x2139), I(0x213A, 0x213B), I(0x213C, 0x213F), I(0x2140, 0x2144), I(0x2145, 0x2149), I(0x214A, 0x214A), I(0x214B, 0x214B), I(0x214C, 0x214D), I(0x214F, 0x214F), I(0x2150, 0x215F), I(0x2189, 0x2189), I(0x2190, 0x2194), I(0x2195, 0x2199), I(0x219A, 0x219B), I(0x219C, 0x219F), I(0x21A0, 0x21A0), I(0x21A1, 0x21A2), I(0x21A3, 0x21A3), I(0x21A4, 0x21A5), I(0x21A6, 0x21A6), I(0x21A7, 0x21AD), I(0x21AE, 0x21AE), I(0x21AF, 0x21CD), I(0x21CE, 0x21CF), I(0x21D0, 0x21D1), I(0x21D2, 0x21D2), I(0x21D3, 0x21D3), I(0x21D4, 0x21D4), I(0x21D5, 0x21F3), I(0x21F4, 0x22FF), I(0x2300, 0x2307), I(0x2308, 0x230B), I(0x230C, 0x231F), I(0x2320, 0x2321), I(0x2322, 0x2328), I(0x2329, 0x2329), I(0x232A, 0x232A), I(0x232B, 0x237B), I(0x237C, 0x237C), I(0x237D, 0x239A), I(0x239B, 0x23B3), I(0x23B4, 0x23DB), I(0x23DC, 0x23E1), I(0x23E2, 0x23F3), I(0x2400, 0x2426), I(0x2440, 0x244A), I(0x2460, 0x249B), I(0x249C, 0x24E9), I(0x24EA, 0x24FF), I(0x2500, 0x25B6), I(0x25B7, 0x25B7), I(0x25B8, 0x25C0), I(0x25C1, 0x25C1), I(0x25C2, 0x25F7), I(0x25F8, 0x25FF), I(0x2600, 0x266E), I(0x266F, 0x266F), I(0x2670, 0x26FF), I(0x2701, 0x2767), I(0x2768, 0x2768), I(0x2769, 0x2769), I(0x276A, 0x276A), I(0x276B, 0x276B), I(0x276C, 0x276C), I(0x276D, 0x276D), I(0x276E, 0x276E), I(0x276F, 0x276F), I(0x2770, 0x2770), I(0x2771, 0x2771), I(0x2772, 0x2772), I(0x2773, 0x2773), I(0x2774, 0x2774), I(0x2775, 0x2775), I(0x2776, 0x2793), I(0x2794, 0x27BF), I(0x27C0, 0x27C4), I(0x27C5, 0x27C5), I(0x27C6, 0x27C6), I(0x27C7, 0x27CA), I(0x27CC, 0x27CC), I(0x27CE, 0x27E5), I(0x27E6, 0x27E6), I(0x27E7, 0x27E7), I(0x27E8, 0x27E8), I(0x27E9, 0x27E9), I(0x27EA, 0x27EA), I(0x27EB, 0x27EB), I(0x27EC, 0x27EC), I(0x27ED, 0x27ED), I(0x27EE, 0x27EE), I(0x27EF, 0x27EF), I(0x27F0, 0x27FF), I(0x2900, 0x2982), I(0x2983, 0x2983), I(0x2984, 0x2984), I(0x2985, 0x2985), I(0x2986, 0x2986), I(0x2987, 0x2987), I(0x2988, 0x2988), I(0x2989, 0x2989), I(0x298A, 0x298A), I(0x298B, 0x298B), I(0x298C, 0x298C), I(0x298D, 0x298D), I(0x298E, 0x298E), I(0x298F, 0x298F), I(0x2990, 0x2990), I(0x2991, 0x2991), I(0x2992, 0x2992), I(0x2993, 0x2993), I(0x2994, 0x2994), I(0x2995, 0x2995), I(0x2996, 0x2996), I(0x2997, 0x2997), I(0x2998, 0x2998), I(0x2999, 0x29D7), I(0x29D8, 0x29D8), I(0x29D9, 0x29D9), I(0x29DA, 0x29DA), I(0x29DB, 0x29DB), I(0x29DC, 0x29FB), I(0x29FC, 0x29FC), I(0x29FD, 0x29FD), I(0x29FE, 0x2AFF), I(0x2B00, 0x2B2F), I(0x2B30, 0x2B44), I(0x2B45, 0x2B46), I(0x2B47, 0x2B4C), I(0x2B50, 0x2B59), I(0x2E00, 0x2E01), I(0x2E02, 0x2E02), I(0x2E03, 0x2E03), I(0x2E04, 0x2E04), I(0x2E05, 0x2E05), I(0x2E06, 0x2E08), I(0x2E09, 0x2E09), I(0x2E0A, 0x2E0A), I(0x2E0B, 0x2E0B), I(0x2E0C, 0x2E0C), I(0x2E0D, 0x2E0D), I(0x2E0E, 0x2E16), I(0x2E17, 0x2E17), I(0x2E18, 0x2E19), I(0x2E1A, 0x2E1A), I(0x2E1B, 0x2E1B), I(0x2E1C, 0x2E1C), I(0x2E1D, 0x2E1D), I(0x2E1E, 0x2E1F), I(0x2E20, 0x2E20), I(0x2E21, 0x2E21), I(0x2E22, 0x2E22), I(0x2E23, 0x2E23), I(0x2E24, 0x2E24), I(0x2E25, 0x2E25), I(0x2E26, 0x2E26), I(0x2E27, 0x2E27), I(0x2E28, 0x2E28), I(0x2E29, 0x2E29), I(0x2E2A, 0x2E2E), I(0x2E2F, 0x2E2F), I(0x2E30, 0x2E31), I(0x2FF0, 0x2FFB), I(0x3000, 0x3000), I(0x3001, 0x3003), I(0x3004, 0x3004), I(0x3006, 0x3006), I(0x3008, 0x3008), I(0x3009, 0x3009), I(0x300A, 0x300A), I(0x300B, 0x300B), I(0x300C, 0x300C), I(0x300D, 0x300D), I(0x300E, 0x300E), I(0x300F, 0x300F), I(0x3010, 0x3010), I(0x3011, 0x3011), I(0x3012, 0x3013), I(0x3014, 0x3014), I(0x3015, 0x3015), I(0x3016, 0x3016), I(0x3017, 0x3017), I(0x3018, 0x3018), I(0x3019, 0x3019), I(0x301A, 0x301A), I(0x301B, 0x301B), I(0x301C, 0x301C), I(0x301D, 0x301D), I(0x301E, 0x301F), I(0x3020, 0x3020), I(0x3030, 0x3030), I(0x3031, 0x3035), I(0x3036, 0x3037), I(0x303C, 0x303C), I(0x303D, 0x303D), I(0x303E, 0x303F), I(0x309B, 0x309C), I(0x30A0, 0x30A0), I(0x30FB, 0x30FB), I(0x30FC, 0x30FC), I(0x3190, 0x3191), I(0x3192, 0x3195), I(0x3196, 0x319F), I(0x31C0, 0x31E3), I(0x3220, 0x3229), I(0x322A, 0x3250), I(0x3251, 0x325F), I(0x327F, 0x327F), I(0x3280, 0x3289), I(0x328A, 0x32B0), I(0x32B1, 0x32BF), I(0x32C0, 0x32CF), I(0x3358, 0x33FF), I(0x4DC0, 0x4DFF), I(0xA700, 0xA716), I(0xA717, 0xA71F), I(0xA720, 0xA721), I(0xA788, 0xA788), I(0xA789, 0xA78A), I(0xA830, 0xA835), I(0xA836, 0xA837), I(0xA838, 0xA838), I(0xA839, 0xA839), I(0xFD3E, 0xFD3E), I(0xFD3F, 0xFD3F), I(0xFDFD, 0xFDFD), I(0xFE10, 0xFE16), I(0xFE17, 0xFE17), I(0xFE18, 0xFE18), I(0xFE19, 0xFE19), I(0xFE30, 0xFE30), I(0xFE31, 0xFE32), I(0xFE33, 0xFE34), I(0xFE35, 0xFE35), I(0xFE36, 0xFE36), I(0xFE37, 0xFE37), I(0xFE38, 0xFE38), I(0xFE39, 0xFE39), I(0xFE3A, 0xFE3A), I(0xFE3B, 0xFE3B), I(0xFE3C, 0xFE3C), I(0xFE3D, 0xFE3D), I(0xFE3E, 0xFE3E), I(0xFE3F, 0xFE3F), I(0xFE40, 0xFE40), I(0xFE41, 0xFE41), I(0xFE42, 0xFE42), I(0xFE43, 0xFE43), I(0xFE44, 0xFE44), I(0xFE45, 0xFE46), I(0xFE47, 0xFE47), I(0xFE48, 0xFE48), I(0xFE49, 0xFE4C), I(0xFE4D, 0xFE4F), I(0xFE50, 0xFE52), I(0xFE54, 0xFE57), I(0xFE58, 0xFE58), I(0xFE59, 0xFE59), I(0xFE5A, 0xFE5A), I(0xFE5B, 0xFE5B), I(0xFE5C, 0xFE5C), I(0xFE5D, 0xFE5D), I(0xFE5E, 0xFE5E), I(0xFE5F, 0xFE61), I(0xFE62, 0xFE62), I(0xFE63, 0xFE63), I(0xFE64, 0xFE66), I(0xFE68, 0xFE68), I(0xFE69, 0xFE69), I(0xFE6A, 0xFE6B), I(0xFEFF, 0xFEFF), I(0xFF01, 0xFF03), I(0xFF04, 0xFF04), I(0xFF05, 0xFF07), I(0xFF08, 0xFF08), I(0xFF09, 0xFF09), I(0xFF0A, 0xFF0A), I(0xFF0B, 0xFF0B), I(0xFF0C, 0xFF0C), I(0xFF0D, 0xFF0D), I(0xFF0E, 0xFF0F), I(0xFF10, 0xFF19), I(0xFF1A, 0xFF1B), I(0xFF1C, 0xFF1E), I(0xFF1F, 0xFF20), I(0xFF3B, 0xFF3B), I(0xFF3C, 0xFF3C), I(0xFF3D, 0xFF3D), I(0xFF3E, 0xFF3E), I(0xFF3F, 0xFF3F), I(0xFF40, 0xFF40), I(0xFF5B, 0xFF5B), I(0xFF5C, 0xFF5C), I(0xFF5D, 0xFF5D), I(0xFF5E, 0xFF5E), I(0xFF5F, 0xFF5F), I(0xFF60, 0xFF60), I(0xFF61, 0xFF61), I(0xFF62, 0xFF62), I(0xFF63, 0xFF63), I(0xFF64, 0xFF65), I(0xFF70, 0xFF70), I(0xFF9E, 0xFF9F), I(0xFFE0, 0xFFE1), I(0xFFE2, 0xFFE2), I(0xFFE3, 0xFFE3), I(0xFFE4, 0xFFE4), I(0xFFE5, 0xFFE6), I(0xFFE8, 0xFFE8), I(0xFFE9, 0xFFEC), I(0xFFED, 0xFFEE), I(0xFFF9, 0xFFFB), I(0xFFFC, 0xFFFD), I(0x10100, 0x10101), I(0x10102, 0x10102), I(0x10107, 0x10133), I(0x10137, 0x1013F), I(0x10190, 0x1019B), I(0x101D0, 0x101FC), I(0x1D000, 0x1D0F5), I(0x1D100, 0x1D126), I(0x1D129, 0x1D164), I(0x1D165, 0x1D166), I(0x1D16A, 0x1D16C), I(0x1D16D, 0x1D172), I(0x1D173, 0x1D17A), I(0x1D183, 0x1D184), I(0x1D18C, 0x1D1A9), I(0x1D1AE, 0x1D1DD), I(0x1D300, 0x1D356), I(0x1D360, 0x1D371), I(0x1D400, 0x1D454), I(0x1D456, 0x1D49C), I(0x1D49E, 0x1D49F), I(0x1D4A2, 0x1D4A2), I(0x1D4A5, 0x1D4A6), I(0x1D4A9, 0x1D4AC), I(0x1D4AE, 0x1D4B9), I(0x1D4BB, 0x1D4BB), I(0x1D4BD, 0x1D4C3), I(0x1D4C5, 0x1D505), I(0x1D507, 0x1D50A), I(0x1D50D, 0x1D514), I(0x1D516, 0x1D51C), I(0x1D51E, 0x1D539), I(0x1D53B, 0x1D53E), I(0x1D540, 0x1D544), I(0x1D546, 0x1D546), I(0x1D54A, 0x1D550), I(0x1D552, 0x1D6A5), I(0x1D6A8, 0x1D6C0), I(0x1D6C1, 0x1D6C1), I(0x1D6C2, 0x1D6DA), I(0x1D6DB, 0x1D6DB), I(0x1D6DC, 0x1D6FA), I(0x1D6FB, 0x1D6FB), I(0x1D6FC, 0x1D714), I(0x1D715, 0x1D715), I(0x1D716, 0x1D734), I(0x1D735, 0x1D735), I(0x1D736, 0x1D74E), I(0x1D74F, 0x1D74F), I(0x1D750, 0x1D76E), I(0x1D76F, 0x1D76F), I(0x1D770, 0x1D788), I(0x1D789, 0x1D789), I(0x1D78A, 0x1D7A8), I(0x1D7A9, 0x1D7A9), I(0x1D7AA, 0x1D7C2), I(0x1D7C3, 0x1D7C3), I(0x1D7C4, 0x1D7CB), I(0x1D7CE, 0x1D7FF), I(0x1F000, 0x1F02B), I(0x1F030, 0x1F093), I(0x1F0A0, 0x1F0AE), I(0x1F0B1, 0x1F0BE), I(0x1F0C1, 0x1F0CF), I(0x1F0D1, 0x1F0DF), I(0x1F100, 0x1F10A), I(0x1F110, 0x1F12E), I(0x1F130, 0x1F169), I(0x1F170, 0x1F19A), I(0x1F1E6, 0x1F1FF), I(0x1F201, 0x1F202), I(0x1F210, 0x1F23A), I(0x1F240, 0x1F248), I(0x1F250, 0x1F251), I(0x1F300, 0x1F320), I(0x1F330, 0x1F335), I(0x1F337, 0x1F37C), I(0x1F380, 0x1F393), I(0x1F3A0, 0x1F3C4), I(0x1F3C6, 0x1F3CA), I(0x1F3E0, 0x1F3F0), I(0x1F400, 0x1F43E), I(0x1F440, 0x1F440), I(0x1F442, 0x1F4F7), I(0x1F4F9, 0x1F4FC), I(0x1F500, 0x1F53D), I(0x1F550, 0x1F567), I(0x1F5FB, 0x1F5FF), I(0x1F601, 0x1F610), I(0x1F612, 0x1F614), I(0x1F616, 0x1F616), I(0x1F618, 0x1F618), I(0x1F61A, 0x1F61A), I(0x1F61C, 0x1F61E), I(0x1F620, 0x1F625), I(0x1F628, 0x1F62B), I(0x1F62D, 0x1F62D), I(0x1F630, 0x1F633), I(0x1F635, 0x1F640), I(0x1F645, 0x1F64F), I(0x1F680, 0x1F6C5), I(0x1F700, 0x1F773), I(0xE0001, 0xE0001), I(0xE0020, 0xE007F)));
    addScript("Coptic", Arrays.asList(I(0x03E2, 0x03EF), I(0x2C80, 0x2CE4), I(0x2CE5, 0x2CEA), I(0x2CEB, 0x2CEE), I(0x2CEF, 0x2CF1), I(0x2CF9, 0x2CFC), I(0x2CFD, 0x2CFD), I(0x2CFE, 0x2CFF)));
    addScript("Cuneiform", Arrays.asList(I(0x12000, 0x1236E), I(0x12400, 0x12462), I(0x12470, 0x12473)));
    addScript("Cypriot", Arrays.asList(I(0x10800, 0x10805), I(0x10808, 0x10808), I(0x1080A, 0x10835), I(0x10837, 0x10838), I(0x1083C, 0x1083C), I(0x1083F, 0x1083F)));
    addScript("Cyrillic", Arrays.asList(I(0x0400, 0x0481), I(0x0482, 0x0482), I(0x0483, 0x0484), I(0x0487, 0x0487), I(0x0488, 0x0489), I(0x048A, 0x0527), I(0x1D2B, 0x1D2B), I(0x1D78, 0x1D78), I(0x2DE0, 0x2DFF), I(0xA640, 0xA66D), I(0xA66E, 0xA66E), I(0xA66F, 0xA66F), I(0xA670, 0xA672), I(0xA673, 0xA673), I(0xA67C, 0xA67D), I(0xA67E, 0xA67E), I(0xA67F, 0xA67F), I(0xA680, 0xA697)));
    addScript("Deseret", Arrays.asList(I(0x10400, 0x1044F)));
    addScript("Devanagari", Arrays.asList(I(0x0900, 0x0902), I(0x0903, 0x0903), I(0x0904, 0x0939), I(0x093A, 0x093A), I(0x093B, 0x093B), I(0x093C, 0x093C), I(0x093D, 0x093D), I(0x093E, 0x0940), I(0x0941, 0x0948), I(0x0949, 0x094C), I(0x094D, 0x094D), I(0x094E, 0x094F), I(0x0950, 0x0950), I(0x0953, 0x0957), I(0x0958, 0x0961), I(0x0962, 0x0963), I(0x0966, 0x096F), I(0x0971, 0x0971), I(0x0972, 0x0977), I(0x0979, 0x097F), I(0xA8E0, 0xA8F1), I(0xA8F2, 0xA8F7), I(0xA8F8, 0xA8FA), I(0xA8FB, 0xA8FB)));
    addScript("Egyptian_Hieroglyphs", Arrays.asList(I(0x13000, 0x1342E)));
    addScript("Ethiopic", Arrays.asList(I(0x1200, 0x1248), I(0x124A, 0x124D), I(0x1250, 0x1256), I(0x1258, 0x1258), I(0x125A, 0x125D), I(0x1260, 0x1288), I(0x128A, 0x128D), I(0x1290, 0x12B0), I(0x12B2, 0x12B5), I(0x12B8, 0x12BE), I(0x12C0, 0x12C0), I(0x12C2, 0x12C5), I(0x12C8, 0x12D6), I(0x12D8, 0x1310), I(0x1312, 0x1315), I(0x1318, 0x135A), I(0x135D, 0x135F), I(0x1360, 0x1360), I(0x1361, 0x1368), I(0x1369, 0x137C), I(0x1380, 0x138F), I(0x1390, 0x1399), I(0x2D80, 0x2D96), I(0x2DA0, 0x2DA6), I(0x2DA8, 0x2DAE), I(0x2DB0, 0x2DB6), I(0x2DB8, 0x2DBE), I(0x2DC0, 0x2DC6), I(0x2DC8, 0x2DCE), I(0x2DD0, 0x2DD6), I(0x2DD8, 0x2DDE), I(0xAB01, 0xAB06), I(0xAB09, 0xAB0E), I(0xAB11, 0xAB16), I(0xAB20, 0xAB26), I(0xAB28, 0xAB2E)));
    addScript("Georgian", Arrays.asList(I(0x10A0, 0x10C5), I(0x10D0, 0x10FA), I(0x10FC, 0x10FC), I(0x2D00, 0x2D25)));
    addScript("Glagolitic", Arrays.asList(I(0x2C00, 0x2C2E), I(0x2C30, 0x2C5E)));
    addScript("Gothic", Arrays.asList(I(0x10330, 0x10340), I(0x10341, 0x10341), I(0x10342, 0x10349), I(0x1034A, 0x1034A)));
    addScript("Greek", Arrays.asList(I(0x0370, 0x0373), I(0x0375, 0x0375), I(0x0376, 0x0377), I(0x037A, 0x037A), I(0x037B, 0x037D), I(0x0384, 0x0384), I(0x0386, 0x0386), I(0x0388, 0x038A), I(0x038C, 0x038C), I(0x038E, 0x03A1), I(0x03A3, 0x03E1), I(0x03F0, 0x03F5), I(0x03F6, 0x03F6), I(0x03F7, 0x03FF), I(0x1D26, 0x1D2A), I(0x1D5D, 0x1D61), I(0x1D66, 0x1D6A), I(0x1DBF, 0x1DBF), I(0x1F00, 0x1F15), I(0x1F18, 0x1F1D), I(0x1F20, 0x1F45), I(0x1F48, 0x1F4D), I(0x1F50, 0x1F57), I(0x1F59, 0x1F59), I(0x1F5B, 0x1F5B), I(0x1F5D, 0x1F5D), I(0x1F5F, 0x1F7D), I(0x1F80, 0x1FB4), I(0x1FB6, 0x1FBC), I(0x1FBD, 0x1FBD), I(0x1FBE, 0x1FBE), I(0x1FBF, 0x1FC1), I(0x1FC2, 0x1FC4), I(0x1FC6, 0x1FCC), I(0x1FCD, 0x1FCF), I(0x1FD0, 0x1FD3), I(0x1FD6, 0x1FDB), I(0x1FDD, 0x1FDF), I(0x1FE0, 0x1FEC), I(0x1FED, 0x1FEF), I(0x1FF2, 0x1FF4), I(0x1FF6, 0x1FFC), I(0x1FFD, 0x1FFE), I(0x2126, 0x2126), I(0x10140, 0x10174), I(0x10175, 0x10178), I(0x10179, 0x10189), I(0x1018A, 0x1018A), I(0x1D200, 0x1D241), I(0x1D242, 0x1D244), I(0x1D245, 0x1D245)));
    addScript("Gujarati", Arrays.asList(I(0x0A81, 0x0A82), I(0x0A83, 0x0A83), I(0x0A85, 0x0A8D), I(0x0A8F, 0x0A91), I(0x0A93, 0x0AA8), I(0x0AAA, 0x0AB0), I(0x0AB2, 0x0AB3), I(0x0AB5, 0x0AB9), I(0x0ABC, 0x0ABC), I(0x0ABD, 0x0ABD), I(0x0ABE, 0x0AC0), I(0x0AC1, 0x0AC5), I(0x0AC7, 0x0AC8), I(0x0AC9, 0x0AC9), I(0x0ACB, 0x0ACC), I(0x0ACD, 0x0ACD), I(0x0AD0, 0x0AD0), I(0x0AE0, 0x0AE1), I(0x0AE2, 0x0AE3), I(0x0AE6, 0x0AEF), I(0x0AF1, 0x0AF1)));
    addScript("Gurmukhi", Arrays.asList(I(0x0A01, 0x0A02), I(0x0A03, 0x0A03), I(0x0A05, 0x0A0A), I(0x0A0F, 0x0A10), I(0x0A13, 0x0A28), I(0x0A2A, 0x0A30), I(0x0A32, 0x0A33), I(0x0A35, 0x0A36), I(0x0A38, 0x0A39), I(0x0A3C, 0x0A3C), I(0x0A3E, 0x0A40), I(0x0A41, 0x0A42), I(0x0A47, 0x0A48), I(0x0A4B, 0x0A4D), I(0x0A51, 0x0A51), I(0x0A59, 0x0A5C), I(0x0A5E, 0x0A5E), I(0x0A66, 0x0A6F), I(0x0A70, 0x0A71), I(0x0A72, 0x0A74), I(0x0A75, 0x0A75)));
    addScript("Han", Arrays.asList(I(0x2E80, 0x2E99), I(0x2E9B, 0x2EF3), I(0x2F00, 0x2FD5), I(0x3005, 0x3005), I(0x3007, 0x3007), I(0x3021, 0x3029), I(0x3038, 0x303A), I(0x303B, 0x303B), I(0x3400, 0x4DB5), I(0x4E00, 0x9FCB), I(0xF900, 0xFA2D), I(0xFA30, 0xFA6D), I(0xFA70, 0xFAD9), I(0x20000, 0x2A6D6), I(0x2A700, 0x2B734), I(0x2B740, 0x2B81D), I(0x2F800, 0x2FA1D)));
    addScript("Hangul", Arrays.asList(I(0x1100, 0x11FF), I(0x302E, 0x302F), I(0x3131, 0x318E), I(0x3200, 0x321E), I(0x3260, 0x327E), I(0xA960, 0xA97C), I(0xAC00, 0xD7A3), I(0xD7B0, 0xD7C6), I(0xD7CB, 0xD7FB), I(0xFFA0, 0xFFBE), I(0xFFC2, 0xFFC7), I(0xFFCA, 0xFFCF), I(0xFFD2, 0xFFD7), I(0xFFDA, 0xFFDC)));
    addScript("Hanunoo", Arrays.asList(I(0x1720, 0x1731), I(0x1732, 0x1734)));
    addScript("Hebrew", Arrays.asList(I(0x0591, 0x05BD), I(0x05BE, 0x05BE), I(0x05BF, 0x05BF), I(0x05C0, 0x05C0), I(0x05C1, 0x05C2), I(0x05C3, 0x05C3), I(0x05C4, 0x05C5), I(0x05C6, 0x05C6), I(0x05C7, 0x05C7), I(0x05D0, 0x05EA), I(0x05F0, 0x05F2), I(0x05F3, 0x05F4), I(0xFB1D, 0xFB1D), I(0xFB1E, 0xFB1E), I(0xFB1F, 0xFB28), I(0xFB29, 0xFB29), I(0xFB2A, 0xFB36), I(0xFB38, 0xFB3C), I(0xFB3E, 0xFB3E), I(0xFB40, 0xFB41), I(0xFB43, 0xFB44), I(0xFB46, 0xFB4F)));
    addScript("Hiragana", Arrays.asList(I(0x3041, 0x3096), I(0x309D, 0x309E), I(0x309F, 0x309F), I(0x1B001, 0x1B001), I(0x1F200, 0x1F200)));
    addScript("Imperial_Aramaic", Arrays.asList(I(0x10840, 0x10855), I(0x10857, 0x10857), I(0x10858, 0x1085F)));
    addScript("Inherited", Arrays.asList(I(0x0300, 0x036F), I(0x0485, 0x0486), I(0x064B, 0x0655), I(0x065F, 0x065F), I(0x0670, 0x0670), I(0x0951, 0x0952), I(0x1CD0, 0x1CD2), I(0x1CD4, 0x1CE0), I(0x1CE2, 0x1CE8), I(0x1CED, 0x1CED), I(0x1DC0, 0x1DE6), I(0x1DFC, 0x1DFF), I(0x200C, 0x200D), I(0x20D0, 0x20DC), I(0x20DD, 0x20E0), I(0x20E1, 0x20E1), I(0x20E2, 0x20E4), I(0x20E5, 0x20F0), I(0x302A, 0x302D), I(0x3099, 0x309A), I(0xFE00, 0xFE0F), I(0xFE20, 0xFE26), I(0x101FD, 0x101FD), I(0x1D167, 0x1D169), I(0x1D17B, 0x1D182), I(0x1D185, 0x1D18B), I(0x1D1AA, 0x1D1AD), I(0xE0100, 0xE01EF)));
    addScript("Inscriptional_Pahlavi", Arrays.asList(I(0x10B60, 0x10B72), I(0x10B78, 0x10B7F)));
    addScript("Inscriptional_Parthian", Arrays.asList(I(0x10B40, 0x10B55), I(0x10B58, 0x10B5F)));
    addScript("Javanese", Arrays.asList(I(0xA980, 0xA982), I(0xA983, 0xA983), I(0xA984, 0xA9B2), I(0xA9B3, 0xA9B3), I(0xA9B4, 0xA9B5), I(0xA9B6, 0xA9B9), I(0xA9BA, 0xA9BB), I(0xA9BC, 0xA9BC), I(0xA9BD, 0xA9C0), I(0xA9C1, 0xA9CD), I(0xA9CF, 0xA9CF), I(0xA9D0, 0xA9D9), I(0xA9DE, 0xA9DF)));
    addScript("Kaithi", Arrays.asList(I(0x11080, 0x11081), I(0x11082, 0x11082), I(0x11083, 0x110AF), I(0x110B0, 0x110B2), I(0x110B3, 0x110B6), I(0x110B7, 0x110B8), I(0x110B9, 0x110BA), I(0x110BB, 0x110BC), I(0x110BD, 0x110BD), I(0x110BE, 0x110C1)));
    addScript("Kannada", Arrays.asList(I(0x0C82, 0x0C83), I(0x0C85, 0x0C8C), I(0x0C8E, 0x0C90), I(0x0C92, 0x0CA8), I(0x0CAA, 0x0CB3), I(0x0CB5, 0x0CB9), I(0x0CBC, 0x0CBC), I(0x0CBD, 0x0CBD), I(0x0CBE, 0x0CBE), I(0x0CBF, 0x0CBF), I(0x0CC0, 0x0CC4), I(0x0CC6, 0x0CC6), I(0x0CC7, 0x0CC8), I(0x0CCA, 0x0CCB), I(0x0CCC, 0x0CCD), I(0x0CD5, 0x0CD6), I(0x0CDE, 0x0CDE), I(0x0CE0, 0x0CE1), I(0x0CE2, 0x0CE3), I(0x0CE6, 0x0CEF), I(0x0CF1, 0x0CF2)));
    addScript("Katakana", Arrays.asList(I(0x30A1, 0x30FA), I(0x30FD, 0x30FE), I(0x30FF, 0x30FF), I(0x31F0, 0x31FF), I(0x32D0, 0x32FE), I(0x3300, 0x3357), I(0xFF66, 0xFF6F), I(0xFF71, 0xFF9D), I(0x1B000, 0x1B000)));
    addScript("Kayah_Li", Arrays.asList(I(0xA900, 0xA909), I(0xA90A, 0xA925), I(0xA926, 0xA92D), I(0xA92E, 0xA92F)));
    addScript("Kharoshthi", Arrays.asList(I(0x10A00, 0x10A00), I(0x10A01, 0x10A03), I(0x10A05, 0x10A06), I(0x10A0C, 0x10A0F), I(0x10A10, 0x10A13), I(0x10A15, 0x10A17), I(0x10A19, 0x10A33), I(0x10A38, 0x10A3A), I(0x10A3F, 0x10A3F), I(0x10A40, 0x10A47), I(0x10A50, 0x10A58)));
    addScript("Khmer", Arrays.asList(I(0x1780, 0x17B3), I(0x17B4, 0x17B5), I(0x17B6, 0x17B6), I(0x17B7, 0x17BD), I(0x17BE, 0x17C5), I(0x17C6, 0x17C6), I(0x17C7, 0x17C8), I(0x17C9, 0x17D3), I(0x17D4, 0x17D6), I(0x17D7, 0x17D7), I(0x17D8, 0x17DA), I(0x17DB, 0x17DB), I(0x17DC, 0x17DC), I(0x17DD, 0x17DD), I(0x17E0, 0x17E9), I(0x17F0, 0x17F9), I(0x19E0, 0x19FF)));
    addScript("Lao", Arrays.asList(I(0x0E81, 0x0E82), I(0x0E84, 0x0E84), I(0x0E87, 0x0E88), I(0x0E8A, 0x0E8A), I(0x0E8D, 0x0E8D), I(0x0E94, 0x0E97), I(0x0E99, 0x0E9F), I(0x0EA1, 0x0EA3), I(0x0EA5, 0x0EA5), I(0x0EA7, 0x0EA7), I(0x0EAA, 0x0EAB), I(0x0EAD, 0x0EB0), I(0x0EB1, 0x0EB1), I(0x0EB2, 0x0EB3), I(0x0EB4, 0x0EB9), I(0x0EBB, 0x0EBC), I(0x0EBD, 0x0EBD), I(0x0EC0, 0x0EC4), I(0x0EC6, 0x0EC6), I(0x0EC8, 0x0ECD), I(0x0ED0, 0x0ED9), I(0x0EDC, 0x0EDD)));
    addScript("Latin", Arrays.asList(I(0x0041, 0x005A), I(0x0061, 0x007A), I(0x00AA, 0x00AA), I(0x00BA, 0x00BA), I(0x00C0, 0x00D6), I(0x00D8, 0x00F6), I(0x00F8, 0x01BA), I(0x01BB, 0x01BB), I(0x01BC, 0x01BF), I(0x01C0, 0x01C3), I(0x01C4, 0x0293), I(0x0294, 0x0294), I(0x0295, 0x02AF), I(0x02B0, 0x02B8), I(0x02E0, 0x02E4), I(0x1D00, 0x1D25), I(0x1D2C, 0x1D5C), I(0x1D62, 0x1D65), I(0x1D6B, 0x1D77), I(0x1D79, 0x1D9A), I(0x1D9B, 0x1DBE), I(0x1E00, 0x1EFF), I(0x2071, 0x2071), I(0x207F, 0x207F), I(0x2090, 0x209C), I(0x212A, 0x212B), I(0x2132, 0x2132), I(0x214E, 0x214E), I(0x2160, 0x2182), I(0x2183, 0x2184), I(0x2185, 0x2188), I(0x2C60, 0x2C7C), I(0x2C7D, 0x2C7D), I(0x2C7E, 0x2C7F), I(0xA722, 0xA76F), I(0xA770, 0xA770), I(0xA771, 0xA787), I(0xA78B, 0xA78E), I(0xA790, 0xA791), I(0xA7A0, 0xA7A9), I(0xA7FA, 0xA7FA), I(0xA7FB, 0xA7FF), I(0xFB00, 0xFB06), I(0xFF21, 0xFF3A), I(0xFF41, 0xFF5A)));
    addScript("Lepcha", Arrays.asList(I(0x1C00, 0x1C23), I(0x1C24, 0x1C2B), I(0x1C2C, 0x1C33), I(0x1C34, 0x1C35), I(0x1C36, 0x1C37), I(0x1C3B, 0x1C3F), I(0x1C40, 0x1C49), I(0x1C4D, 0x1C4F)));
    addScript("Limbu", Arrays.asList(I(0x1900, 0x191C), I(0x1920, 0x1922), I(0x1923, 0x1926), I(0x1927, 0x1928), I(0x1929, 0x192B), I(0x1930, 0x1931), I(0x1932, 0x1932), I(0x1933, 0x1938), I(0x1939, 0x193B), I(0x1940, 0x1940), I(0x1944, 0x1945), I(0x1946, 0x194F)));
    addScript("Linear_B", Arrays.asList(I(0x10000, 0x1000B), I(0x1000D, 0x10026), I(0x10028, 0x1003A), I(0x1003C, 0x1003D), I(0x1003F, 0x1004D), I(0x10050, 0x1005D), I(0x10080, 0x100FA)));
    addScript("Lisu", Arrays.asList(I(0xA4D0, 0xA4F7), I(0xA4F8, 0xA4FD), I(0xA4FE, 0xA4FF)));
    addScript("Lycian", Arrays.asList(I(0x10280, 0x1029C)));
    addScript("Lydian", Arrays.asList(I(0x10920, 0x10939), I(0x1093F, 0x1093F)));
    addScript("Malayalam", Arrays.asList(I(0x0D02, 0x0D03), I(0x0D05, 0x0D0C), I(0x0D0E, 0x0D10), I(0x0D12, 0x0D3A), I(0x0D3D, 0x0D3D), I(0x0D3E, 0x0D40), I(0x0D41, 0x0D44), I(0x0D46, 0x0D48), I(0x0D4A, 0x0D4C), I(0x0D4D, 0x0D4D), I(0x0D4E, 0x0D4E), I(0x0D57, 0x0D57), I(0x0D60, 0x0D61), I(0x0D62, 0x0D63), I(0x0D66, 0x0D6F), I(0x0D70, 0x0D75), I(0x0D79, 0x0D79), I(0x0D7A, 0x0D7F)));
    addScript("Mandaic", Arrays.asList(I(0x0840, 0x0858), I(0x0859, 0x085B), I(0x085E, 0x085E)));
    addScript("Meetei_Mayek", Arrays.asList(I(0xABC0, 0xABE2), I(0xABE3, 0xABE4), I(0xABE5, 0xABE5), I(0xABE6, 0xABE7), I(0xABE8, 0xABE8), I(0xABE9, 0xABEA), I(0xABEB, 0xABEB), I(0xABEC, 0xABEC), I(0xABED, 0xABED), I(0xABF0, 0xABF9)));
    addScript("Mongolian", Arrays.asList(I(0x1800, 0x1801), I(0x1804, 0x1804), I(0x1806, 0x1806), I(0x1807, 0x180A), I(0x180B, 0x180D), I(0x180E, 0x180E), I(0x1810, 0x1819), I(0x1820, 0x1842), I(0x1843, 0x1843), I(0x1844, 0x1877), I(0x1880, 0x18A8), I(0x18A9, 0x18A9), I(0x18AA, 0x18AA)));
    addScript("Myanmar", Arrays.asList(I(0x1000, 0x102A), I(0x102B, 0x102C), I(0x102D, 0x1030), I(0x1031, 0x1031), I(0x1032, 0x1037), I(0x1038, 0x1038), I(0x1039, 0x103A), I(0x103B, 0x103C), I(0x103D, 0x103E), I(0x103F, 0x103F), I(0x1040, 0x1049), I(0x104A, 0x104F), I(0x1050, 0x1055), I(0x1056, 0x1057), I(0x1058, 0x1059), I(0x105A, 0x105D), I(0x105E, 0x1060), I(0x1061, 0x1061), I(0x1062, 0x1064), I(0x1065, 0x1066), I(0x1067, 0x106D), I(0x106E, 0x1070), I(0x1071, 0x1074), I(0x1075, 0x1081), I(0x1082, 0x1082), I(0x1083, 0x1084), I(0x1085, 0x1086), I(0x1087, 0x108C), I(0x108D, 0x108D), I(0x108E, 0x108E), I(0x108F, 0x108F), I(0x1090, 0x1099), I(0x109A, 0x109C), I(0x109D, 0x109D), I(0x109E, 0x109F), I(0xAA60, 0xAA6F), I(0xAA70, 0xAA70), I(0xAA71, 0xAA76), I(0xAA77, 0xAA79), I(0xAA7A, 0xAA7A), I(0xAA7B, 0xAA7B)));
    addScript("New_Tai_Lue", Arrays.asList(I(0x1980, 0x19AB), I(0x19B0, 0x19C0), I(0x19C1, 0x19C7), I(0x19C8, 0x19C9), I(0x19D0, 0x19D9), I(0x19DA, 0x19DA), I(0x19DE, 0x19DF)));
    addScript("Nko", Arrays.asList(I(0x07C0, 0x07C9), I(0x07CA, 0x07EA), I(0x07EB, 0x07F3), I(0x07F4, 0x07F5), I(0x07F6, 0x07F6), I(0x07F7, 0x07F9), I(0x07FA, 0x07FA)));
    addScript("Ogham", Arrays.asList(I(0x1680, 0x1680), I(0x1681, 0x169A), I(0x169B, 0x169B), I(0x169C, 0x169C)));
    addScript("Ol_Chiki", Arrays.asList(I(0x1C50, 0x1C59), I(0x1C5A, 0x1C77), I(0x1C78, 0x1C7D), I(0x1C7E, 0x1C7F)));
    addScript("Old_Italic", Arrays.asList(I(0x10300, 0x1031E), I(0x10320, 0x10323)));
    addScript("Old_Persian", Arrays.asList(I(0x103A0, 0x103C3), I(0x103C8, 0x103CF), I(0x103D0, 0x103D0), I(0x103D1, 0x103D5)));
    addScript("Old_South_Arabian", Arrays.asList(I(0x10A60, 0x10A7C), I(0x10A7D, 0x10A7E), I(0x10A7F, 0x10A7F)));
    addScript("Old_Turkic", Arrays.asList(I(0x10C00, 0x10C48)));
    addScript("Oriya", Arrays.asList(I(0x0B01, 0x0B01), I(0x0B02, 0x0B03), I(0x0B05, 0x0B0C), I(0x0B0F, 0x0B10), I(0x0B13, 0x0B28), I(0x0B2A, 0x0B30), I(0x0B32, 0x0B33), I(0x0B35, 0x0B39), I(0x0B3C, 0x0B3C), I(0x0B3D, 0x0B3D), I(0x0B3E, 0x0B3E), I(0x0B3F, 0x0B3F), I(0x0B40, 0x0B40), I(0x0B41, 0x0B44), I(0x0B47, 0x0B48), I(0x0B4B, 0x0B4C), I(0x0B4D, 0x0B4D), I(0x0B56, 0x0B56), I(0x0B57, 0x0B57), I(0x0B5C, 0x0B5D), I(0x0B5F, 0x0B61), I(0x0B62, 0x0B63), I(0x0B66, 0x0B6F), I(0x0B70, 0x0B70), I(0x0B71, 0x0B71), I(0x0B72, 0x0B77)));
    addScript("Osmanya", Arrays.asList(I(0x10480, 0x1049D), I(0x104A0, 0x104A9)));
    addScript("Phags_Pa", Arrays.asList(I(0xA840, 0xA873), I(0xA874, 0xA877)));
    addScript("Phoenician", Arrays.asList(I(0x10900, 0x10915), I(0x10916, 0x1091B), I(0x1091F, 0x1091F)));
    addScript("Rejang", Arrays.asList(I(0xA930, 0xA946), I(0xA947, 0xA951), I(0xA952, 0xA953), I(0xA95F, 0xA95F)));
    addScript("Runic", Arrays.asList(I(0x16A0, 0x16EA), I(0x16EE, 0x16F0)));
    addScript("Samaritan", Arrays.asList(I(0x0800, 0x0815), I(0x0816, 0x0819), I(0x081A, 0x081A), I(0x081B, 0x0823), I(0x0824, 0x0824), I(0x0825, 0x0827), I(0x0828, 0x0828), I(0x0829, 0x082D), I(0x0830, 0x083E)));
    addScript("Saurashtra", Arrays.asList(I(0xA880, 0xA881), I(0xA882, 0xA8B3), I(0xA8B4, 0xA8C3), I(0xA8C4, 0xA8C4), I(0xA8CE, 0xA8CF), I(0xA8D0, 0xA8D9)));
    addScript("Shavian", Arrays.asList(I(0x10450, 0x1047F)));
    addScript("Sinhala", Arrays.asList(I(0x0D82, 0x0D83), I(0x0D85, 0x0D96), I(0x0D9A, 0x0DB1), I(0x0DB3, 0x0DBB), I(0x0DBD, 0x0DBD), I(0x0DC0, 0x0DC6), I(0x0DCA, 0x0DCA), I(0x0DCF, 0x0DD1), I(0x0DD2, 0x0DD4), I(0x0DD6, 0x0DD6), I(0x0DD8, 0x0DDF), I(0x0DF2, 0x0DF3), I(0x0DF4, 0x0DF4)));
    addScript("Sundanese", Arrays.asList(I(0x1B80, 0x1B81), I(0x1B82, 0x1B82), I(0x1B83, 0x1BA0), I(0x1BA1, 0x1BA1), I(0x1BA2, 0x1BA5), I(0x1BA6, 0x1BA7), I(0x1BA8, 0x1BA9), I(0x1BAA, 0x1BAA), I(0x1BAE, 0x1BAF), I(0x1BB0, 0x1BB9)));
    addScript("Syloti_Nagri", Arrays.asList(I(0xA800, 0xA801), I(0xA802, 0xA802), I(0xA803, 0xA805), I(0xA806, 0xA806), I(0xA807, 0xA80A), I(0xA80B, 0xA80B), I(0xA80C, 0xA822), I(0xA823, 0xA824), I(0xA825, 0xA826), I(0xA827, 0xA827), I(0xA828, 0xA82B)));
    addScript("Syriac", Arrays.asList(I(0x0700, 0x070D), I(0x070F, 0x070F), I(0x0710, 0x0710), I(0x0711, 0x0711), I(0x0712, 0x072F), I(0x0730, 0x074A), I(0x074D, 0x074F)));
    addScript("Tagalog", Arrays.asList(I(0x1700, 0x170C), I(0x170E, 0x1711), I(0x1712, 0x1714)));
    addScript("Tagbanwa", Arrays.asList(I(0x1760, 0x176C), I(0x176E, 0x1770), I(0x1772, 0x1773)));
    addScript("Tai_Le", Arrays.asList(I(0x1950, 0x196D), I(0x1970, 0x1974)));
    addScript("Tai_Tham", Arrays.asList(I(0x1A20, 0x1A54), I(0x1A55, 0x1A55), I(0x1A56, 0x1A56), I(0x1A57, 0x1A57), I(0x1A58, 0x1A5E), I(0x1A60, 0x1A60), I(0x1A61, 0x1A61), I(0x1A62, 0x1A62), I(0x1A63, 0x1A64), I(0x1A65, 0x1A6C), I(0x1A6D, 0x1A72), I(0x1A73, 0x1A7C), I(0x1A7F, 0x1A7F), I(0x1A80, 0x1A89), I(0x1A90, 0x1A99), I(0x1AA0, 0x1AA6), I(0x1AA7, 0x1AA7), I(0x1AA8, 0x1AAD)));
    addScript("Tai_Viet", Arrays.asList(I(0xAA80, 0xAAAF), I(0xAAB0, 0xAAB0), I(0xAAB1, 0xAAB1), I(0xAAB2, 0xAAB4), I(0xAAB5, 0xAAB6), I(0xAAB7, 0xAAB8), I(0xAAB9, 0xAABD), I(0xAABE, 0xAABF), I(0xAAC0, 0xAAC0), I(0xAAC1, 0xAAC1), I(0xAAC2, 0xAAC2), I(0xAADB, 0xAADC), I(0xAADD, 0xAADD), I(0xAADE, 0xAADF)));
    addScript("Tamil", Arrays.asList(I(0x0B82, 0x0B82), I(0x0B83, 0x0B83), I(0x0B85, 0x0B8A), I(0x0B8E, 0x0B90), I(0x0B92, 0x0B95), I(0x0B99, 0x0B9A), I(0x0B9C, 0x0B9C), I(0x0B9E, 0x0B9F), I(0x0BA3, 0x0BA4), I(0x0BA8, 0x0BAA), I(0x0BAE, 0x0BB9), I(0x0BBE, 0x0BBF), I(0x0BC0, 0x0BC0), I(0x0BC1, 0x0BC2), I(0x0BC6, 0x0BC8), I(0x0BCA, 0x0BCC), I(0x0BCD, 0x0BCD), I(0x0BD0, 0x0BD0), I(0x0BD7, 0x0BD7), I(0x0BE6, 0x0BEF), I(0x0BF0, 0x0BF2), I(0x0BF3, 0x0BF8), I(0x0BF9, 0x0BF9), I(0x0BFA, 0x0BFA)));
    addScript("Telugu", Arrays.asList(I(0x0C01, 0x0C03), I(0x0C05, 0x0C0C), I(0x0C0E, 0x0C10), I(0x0C12, 0x0C28), I(0x0C2A, 0x0C33), I(0x0C35, 0x0C39), I(0x0C3D, 0x0C3D), I(0x0C3E, 0x0C40), I(0x0C41, 0x0C44), I(0x0C46, 0x0C48), I(0x0C4A, 0x0C4D), I(0x0C55, 0x0C56), I(0x0C58, 0x0C59), I(0x0C60, 0x0C61), I(0x0C62, 0x0C63), I(0x0C66, 0x0C6F), I(0x0C78, 0x0C7E), I(0x0C7F, 0x0C7F)));
    addScript("Thaana", Arrays.asList(I(0x0780, 0x07A5), I(0x07A6, 0x07B0), I(0x07B1, 0x07B1)));
    addScript("Thai", Arrays.asList(I(0x0E01, 0x0E30), I(0x0E31, 0x0E31), I(0x0E32, 0x0E33), I(0x0E34, 0x0E3A), I(0x0E40, 0x0E45), I(0x0E46, 0x0E46), I(0x0E47, 0x0E4E), I(0x0E4F, 0x0E4F), I(0x0E50, 0x0E59), I(0x0E5A, 0x0E5B)));
    addScript("Tibetan", Arrays.asList(I(0x0F00, 0x0F00), I(0x0F01, 0x0F03), I(0x0F04, 0x0F12), I(0x0F13, 0x0F17), I(0x0F18, 0x0F19), I(0x0F1A, 0x0F1F), I(0x0F20, 0x0F29), I(0x0F2A, 0x0F33), I(0x0F34, 0x0F34), I(0x0F35, 0x0F35), I(0x0F36, 0x0F36), I(0x0F37, 0x0F37), I(0x0F38, 0x0F38), I(0x0F39, 0x0F39), I(0x0F3A, 0x0F3A), I(0x0F3B, 0x0F3B), I(0x0F3C, 0x0F3C), I(0x0F3D, 0x0F3D), I(0x0F3E, 0x0F3F), I(0x0F40, 0x0F47), I(0x0F49, 0x0F6C), I(0x0F71, 0x0F7E), I(0x0F7F, 0x0F7F), I(0x0F80, 0x0F84), I(0x0F85, 0x0F85), I(0x0F86, 0x0F87), I(0x0F88, 0x0F8C), I(0x0F8D, 0x0F97), I(0x0F99, 0x0FBC), I(0x0FBE, 0x0FC5), I(0x0FC6, 0x0FC6), I(0x0FC7, 0x0FCC), I(0x0FCE, 0x0FCF), I(0x0FD0, 0x0FD4), I(0x0FD9, 0x0FDA)));
    addScript("Tifinagh", Arrays.asList(I(0x2D30, 0x2D65), I(0x2D6F, 0x2D6F), I(0x2D70, 0x2D70), I(0x2D7F, 0x2D7F)));
    addScript("Ugaritic", Arrays.asList(I(0x10380, 0x1039D), I(0x1039F, 0x1039F)));
    addScript("Vai", Arrays.asList(I(0xA500, 0xA60B), I(0xA60C, 0xA60C), I(0xA60D, 0xA60F), I(0xA610, 0xA61F), I(0xA620, 0xA629), I(0xA62A, 0xA62B)));
    addScript("Yi", Arrays.asList(I(0xA000, 0xA014), I(0xA015, 0xA015), I(0xA016, 0xA48C), I(0xA490, 0xA4C6)));
  }


  // generated by generate_unicode_properties.py
  private static void initProperties() {
    addProperty("L&", Arrays.asList(I(0x00B5, 0x00B5), I(0x2102, 0x2102), I(0x2107, 0x2107), I(0x210A, 0x2113), I(0x2115, 0x2115), I(0x2119, 0x211D), I(0x2124, 0x2124), I(0x2128, 0x2128), I(0x212C, 0x212D), I(0x212F, 0x2131), I(0x2133, 0x2134), I(0x2139, 0x2139), I(0x213C, 0x213F), I(0x2145, 0x2149), I(0x1D400, 0x1D454), I(0x1D456, 0x1D49C), I(0x1D49E, 0x1D49F), I(0x1D4A2, 0x1D4A2), I(0x1D4A5, 0x1D4A6), I(0x1D4A9, 0x1D4AC), I(0x1D4AE, 0x1D4B9), I(0x1D4BB, 0x1D4BB), I(0x1D4BD, 0x1D4C3), I(0x1D4C5, 0x1D505), I(0x1D507, 0x1D50A), I(0x1D50D, 0x1D514), I(0x1D516, 0x1D51C), I(0x1D51E, 0x1D539), I(0x1D53B, 0x1D53E), I(0x1D540, 0x1D544), I(0x1D546, 0x1D546), I(0x1D54A, 0x1D550), I(0x1D552, 0x1D6A5), I(0x1D6A8, 0x1D6C0), I(0x1D6C2, 0x1D6DA), I(0x1D6DC, 0x1D6FA), I(0x1D6FC, 0x1D714), I(0x1D716, 0x1D734), I(0x1D736, 0x1D74E), I(0x1D750, 0x1D76E), I(0x1D770, 0x1D788), I(0x1D78A, 0x1D7A8), I(0x1D7AA, 0x1D7C2), I(0x1D7C4, 0x1D7CB), I(0x0041, 0x005A), I(0x0061, 0x007A), I(0x00AA, 0x00AA), I(0x00BA, 0x00BA), I(0x00C0, 0x00D6), I(0x00D8, 0x00F6), I(0x00F8, 0x01BA), I(0x01BC, 0x01BF), I(0x01C4, 0x0293), I(0x0295, 0x02AF), I(0x1D00, 0x1D25), I(0x1D62, 0x1D65), I(0x1D6B, 0x1D77), I(0x1D79, 0x1D9A), I(0x1E00, 0x1EFF), I(0x212A, 0x212B), I(0x2132, 0x2132), I(0x214E, 0x214E), I(0x2183, 0x2184), I(0x2C60, 0x2C7C), I(0x2C7E, 0x2C7F), I(0xA722, 0xA76F), I(0xA771, 0xA787), I(0xA78B, 0xA78E), I(0xA790, 0xA791), I(0xA7A0, 0xA7A9), I(0xA7FA, 0xA7FA), I(0xFB00, 0xFB06), I(0xFF21, 0xFF3A), I(0xFF41, 0xFF5A), I(0x0370, 0x0373), I(0x0376, 0x0377), I(0x037B, 0x037D), I(0x0386, 0x0386), I(0x0388, 0x038A), I(0x038C, 0x038C), I(0x038E, 0x03A1), I(0x03A3, 0x03E1), I(0x03F0, 0x03F5), I(0x03F7, 0x03FF), I(0x1D26, 0x1D2A), I(0x1D66, 0x1D6A), I(0x1F00, 0x1F15), I(0x1F18, 0x1F1D), I(0x1F20, 0x1F45), I(0x1F48, 0x1F4D), I(0x1F50, 0x1F57), I(0x1F59, 0x1F59), I(0x1F5B, 0x1F5B), I(0x1F5D, 0x1F5D), I(0x1F5F, 0x1F7D), I(0x1F80, 0x1FB4), I(0x1FB6, 0x1FBC), I(0x1FBE, 0x1FBE), I(0x1FC2, 0x1FC4), I(0x1FC6, 0x1FCC), I(0x1FD0, 0x1FD3), I(0x1FD6, 0x1FDB), I(0x1FE0, 0x1FEC), I(0x1FF2, 0x1FF4), I(0x1FF6, 0x1FFC), I(0x2126, 0x2126), I(0x0400, 0x0481), I(0x048A, 0x0527), I(0x1D2B, 0x1D2B), I(0xA640, 0xA66D), I(0xA680, 0xA697), I(0x0531, 0x0556), I(0x0561, 0x0587), I(0xFB13, 0xFB17), I(0x10A0, 0x10C5), I(0x2D00, 0x2D25), I(0x10400, 0x1044F), I(0x03E2, 0x03EF), I(0x2C80, 0x2CE4), I(0x2CEB, 0x2CEE), I(0x2C00, 0x2C2E), I(0x2C30, 0x2C5E)));
    addProperty("Mc", Arrays.asList(I(0x1CE1, 0x1CE1), I(0x1CF2, 0x1CF2), I(0x1D165, 0x1D166), I(0x1D16D, 0x1D172), I(0x0903, 0x0903), I(0x093B, 0x093B), I(0x093E, 0x0940), I(0x0949, 0x094C), I(0x094E, 0x094F), I(0x0982, 0x0983), I(0x09BE, 0x09C0), I(0x09C7, 0x09C8), I(0x09CB, 0x09CC), I(0x09D7, 0x09D7), I(0x0A03, 0x0A03), I(0x0A3E, 0x0A40), I(0x0A83, 0x0A83), I(0x0ABE, 0x0AC0), I(0x0AC9, 0x0AC9), I(0x0ACB, 0x0ACC), I(0x0B02, 0x0B03), I(0x0B3E, 0x0B3E), I(0x0B40, 0x0B40), I(0x0B47, 0x0B48), I(0x0B4B, 0x0B4C), I(0x0B57, 0x0B57), I(0x0BBE, 0x0BBF), I(0x0BC1, 0x0BC2), I(0x0BC6, 0x0BC8), I(0x0BCA, 0x0BCC), I(0x0BD7, 0x0BD7), I(0x0C01, 0x0C03), I(0x0C41, 0x0C44), I(0x0C82, 0x0C83), I(0x0CBE, 0x0CBE), I(0x0CC0, 0x0CC4), I(0x0CC7, 0x0CC8), I(0x0CCA, 0x0CCB), I(0x0CD5, 0x0CD6), I(0x0D02, 0x0D03), I(0x0D3E, 0x0D40), I(0x0D46, 0x0D48), I(0x0D4A, 0x0D4C), I(0x0D57, 0x0D57), I(0x0D82, 0x0D83), I(0x0DCF, 0x0DD1), I(0x0DD8, 0x0DDF), I(0x0DF2, 0x0DF3), I(0x0F3E, 0x0F3F), I(0x0F7F, 0x0F7F), I(0x102B, 0x102C), I(0x1031, 0x1031), I(0x1038, 0x1038), I(0x103B, 0x103C), I(0x1056, 0x1057), I(0x1062, 0x1064), I(0x1067, 0x106D), I(0x1083, 0x1084), I(0x1087, 0x108C), I(0x108F, 0x108F), I(0x109A, 0x109C), I(0xAA7B, 0xAA7B), I(0x17B6, 0x17B6), I(0x17BE, 0x17C5), I(0x17C7, 0x17C8), I(0x1923, 0x1926), I(0x1929, 0x192B), I(0x1930, 0x1931), I(0x1933, 0x1938), I(0x1A19, 0x1A1B), I(0x19B0, 0x19C0), I(0x19C8, 0x19C9), I(0xA823, 0xA824), I(0xA827, 0xA827), I(0x1B04, 0x1B04), I(0x1B35, 0x1B35), I(0x1B3B, 0x1B3B), I(0x1B3D, 0x1B41), I(0x1B43, 0x1B44), I(0x1B82, 0x1B82), I(0x1BA1, 0x1BA1), I(0x1BA6, 0x1BA7), I(0x1BAA, 0x1BAA), I(0x1C24, 0x1C2B), I(0x1C34, 0x1C35), I(0xA880, 0xA881), I(0xA8B4, 0xA8C3), I(0xA952, 0xA953), I(0xAA2F, 0xAA30), I(0xAA33, 0xAA34), I(0xAA4D, 0xAA4D), I(0x1A55, 0x1A55), I(0x1A57, 0x1A57), I(0x1A61, 0x1A61), I(0x1A63, 0x1A64), I(0x1A6D, 0x1A72), I(0xA983, 0xA983), I(0xA9B4, 0xA9B5), I(0xA9BA, 0xA9BB), I(0xA9BD, 0xA9C0), I(0xABE3, 0xABE4), I(0xABE6, 0xABE7), I(0xABE9, 0xABEA), I(0xABEC, 0xABEC), I(0x11082, 0x11082), I(0x110B0, 0x110B2), I(0x110B7, 0x110B8), I(0x1BE7, 0x1BE7), I(0x1BEA, 0x1BEC), I(0x1BEE, 0x1BEE), I(0x1BF2, 0x1BF3), I(0x11000, 0x11000), I(0x11002, 0x11002)));
    addProperty("Me", Arrays.asList(I(0x0488, 0x0489), I(0xA670, 0xA672), I(0x20DD, 0x20E0), I(0x20E2, 0x20E4)));
    addProperty("Mn", Arrays.asList(I(0x1D242, 0x1D244), I(0x0483, 0x0484), I(0x0487, 0x0487), I(0x2DE0, 0x2DFF), I(0xA66F, 0xA66F), I(0xA67C, 0xA67D), I(0x0591, 0x05BD), I(0x05BF, 0x05BF), I(0x05C1, 0x05C2), I(0x05C4, 0x05C5), I(0x05C7, 0x05C7), I(0xFB1E, 0xFB1E), I(0x0610, 0x061A), I(0x0656, 0x065E), I(0x06D6, 0x06DC), I(0x06DF, 0x06E4), I(0x06E7, 0x06E8), I(0x06EA, 0x06ED), I(0x0711, 0x0711), I(0x0730, 0x074A), I(0x07A6, 0x07B0), I(0x0900, 0x0902), I(0x093A, 0x093A), I(0x093C, 0x093C), I(0x0941, 0x0948), I(0x094D, 0x094D), I(0x0953, 0x0957), I(0x0962, 0x0963), I(0xA8E0, 0xA8F1), I(0x0981, 0x0981), I(0x09BC, 0x09BC), I(0x09C1, 0x09C4), I(0x09CD, 0x09CD), I(0x09E2, 0x09E3), I(0x0A01, 0x0A02), I(0x0A3C, 0x0A3C), I(0x0A41, 0x0A42), I(0x0A47, 0x0A48), I(0x0A4B, 0x0A4D), I(0x0A51, 0x0A51), I(0x0A70, 0x0A71), I(0x0A75, 0x0A75), I(0x0A81, 0x0A82), I(0x0ABC, 0x0ABC), I(0x0AC1, 0x0AC5), I(0x0AC7, 0x0AC8), I(0x0ACD, 0x0ACD), I(0x0AE2, 0x0AE3), I(0x0B01, 0x0B01), I(0x0B3C, 0x0B3C), I(0x0B3F, 0x0B3F), I(0x0B41, 0x0B44), I(0x0B4D, 0x0B4D), I(0x0B56, 0x0B56), I(0x0B62, 0x0B63), I(0x0B82, 0x0B82), I(0x0BC0, 0x0BC0), I(0x0BCD, 0x0BCD), I(0x0C3E, 0x0C40), I(0x0C46, 0x0C48), I(0x0C4A, 0x0C4D), I(0x0C55, 0x0C56), I(0x0C62, 0x0C63), I(0x0CBC, 0x0CBC), I(0x0CBF, 0x0CBF), I(0x0CC6, 0x0CC6), I(0x0CCC, 0x0CCD), I(0x0CE2, 0x0CE3), I(0x0D41, 0x0D44), I(0x0D4D, 0x0D4D), I(0x0D62, 0x0D63), I(0x0DCA, 0x0DCA), I(0x0DD2, 0x0DD4), I(0x0DD6, 0x0DD6), I(0x0E31, 0x0E31), I(0x0E34, 0x0E3A), I(0x0E47, 0x0E4E), I(0x0EB1, 0x0EB1), I(0x0EB4, 0x0EB9), I(0x0EBB, 0x0EBC), I(0x0EC8, 0x0ECD), I(0x0F18, 0x0F19), I(0x0F35, 0x0F35), I(0x0F37, 0x0F37), I(0x0F39, 0x0F39), I(0x0F71, 0x0F7E), I(0x0F80, 0x0F84), I(0x0F86, 0x0F87), I(0x0F8D, 0x0F97), I(0x0F99, 0x0FBC), I(0x0FC6, 0x0FC6), I(0x102D, 0x1030), I(0x1032, 0x1037), I(0x1039, 0x103A), I(0x103D, 0x103E), I(0x1058, 0x1059), I(0x105E, 0x1060), I(0x1071, 0x1074), I(0x1082, 0x1082), I(0x1085, 0x1086), I(0x108D, 0x108D), I(0x109D, 0x109D), I(0x302E, 0x302F), I(0x135D, 0x135F), I(0x17B7, 0x17BD), I(0x17C6, 0x17C6), I(0x17C9, 0x17D3), I(0x17DD, 0x17DD), I(0x180B, 0x180D), I(0x18A9, 0x18A9), I(0x0300, 0x036F), I(0x0485, 0x0486), I(0x064B, 0x0655), I(0x065F, 0x065F), I(0x0670, 0x0670), I(0x0951, 0x0952), I(0x1CD0, 0x1CD2), I(0x1CD4, 0x1CE0), I(0x1CE2, 0x1CE8), I(0x1CED, 0x1CED), I(0x1DC0, 0x1DE6), I(0x1DFC, 0x1DFF), I(0x20D0, 0x20DC), I(0x20E1, 0x20E1), I(0x20E5, 0x20F0), I(0x302A, 0x302D), I(0x3099, 0x309A), I(0xFE00, 0xFE0F), I(0xFE20, 0xFE26), I(0x101FD, 0x101FD), I(0x1D167, 0x1D169), I(0x1D17B, 0x1D182), I(0x1D185, 0x1D18B), I(0x1D1AA, 0x1D1AD), I(0xE0100, 0xE01EF), I(0x1712, 0x1714), I(0x1732, 0x1734), I(0x1752, 0x1753), I(0x1772, 0x1773), I(0x1920, 0x1922), I(0x1927, 0x1928), I(0x1932, 0x1932), I(0x1939, 0x193B), I(0x1A17, 0x1A18), I(0x2CEF, 0x2CF1), I(0x2D7F, 0x2D7F), I(0xA802, 0xA802), I(0xA806, 0xA806), I(0xA80B, 0xA80B), I(0xA825, 0xA826), I(0x10A01, 0x10A03), I(0x10A05, 0x10A06), I(0x10A0C, 0x10A0F), I(0x10A38, 0x10A3A), I(0x10A3F, 0x10A3F), I(0x1B00, 0x1B03), I(0x1B34, 0x1B34), I(0x1B36, 0x1B3A), I(0x1B3C, 0x1B3C), I(0x1B42, 0x1B42), I(0x1B6B, 0x1B73), I(0x07EB, 0x07F3), I(0x1B80, 0x1B81), I(0x1BA2, 0x1BA5), I(0x1BA8, 0x1BA9), I(0x1C2C, 0x1C33), I(0x1C36, 0x1C37), I(0xA8C4, 0xA8C4), I(0xA926, 0xA92D), I(0xA947, 0xA951), I(0xAA29, 0xAA2E), I(0xAA31, 0xAA32), I(0xAA35, 0xAA36), I(0xAA43, 0xAA43), I(0xAA4C, 0xAA4C), I(0x1A56, 0x1A56), I(0x1A58, 0x1A5E), I(0x1A60, 0x1A60), I(0x1A62, 0x1A62), I(0x1A65, 0x1A6C), I(0x1A73, 0x1A7C), I(0x1A7F, 0x1A7F), I(0xAAB0, 0xAAB0), I(0xAAB2, 0xAAB4), I(0xAAB7, 0xAAB8), I(0xAABE, 0xAABF), I(0xAAC1, 0xAAC1), I(0x0816, 0x0819), I(0x081B, 0x0823), I(0x0825, 0x0827), I(0x0829, 0x082D), I(0xA6F0, 0xA6F1), I(0xA980, 0xA982), I(0xA9B3, 0xA9B3), I(0xA9B6, 0xA9B9), I(0xA9BC, 0xA9BC), I(0xABE5, 0xABE5), I(0xABE8, 0xABE8), I(0xABED, 0xABED), I(0x11080, 0x11081), I(0x110B3, 0x110B6), I(0x110B9, 0x110BA), I(0x1BE6, 0x1BE6), I(0x1BE8, 0x1BE9), I(0x1BED, 0x1BED), I(0x1BEF, 0x1BF1), I(0x11001, 0x11001), I(0x11038, 0x11046), I(0x0859, 0x085B)));
    addProperty("Nd", Arrays.asList(I(0x0030, 0x0039), I(0x0660, 0x0669), I(0xFF10, 0xFF19), I(0x1D7CE, 0x1D7FF), I(0x06F0, 0x06F9), I(0x0966, 0x096F), I(0x09E6, 0x09EF), I(0x0A66, 0x0A6F), I(0x0AE6, 0x0AEF), I(0x0B66, 0x0B6F), I(0x0BE6, 0x0BEF), I(0x0C66, 0x0C6F), I(0x0CE6, 0x0CEF), I(0x0D66, 0x0D6F), I(0x0E50, 0x0E59), I(0x0ED0, 0x0ED9), I(0x0F20, 0x0F29), I(0x1040, 0x1049), I(0x1090, 0x1099), I(0x17E0, 0x17E9), I(0x1810, 0x1819), I(0x1946, 0x194F), I(0x104A0, 0x104A9), I(0x19D0, 0x19D9), I(0x1B50, 0x1B59), I(0x07C0, 0x07C9), I(0x1BB0, 0x1BB9), I(0x1C40, 0x1C49), I(0x1C50, 0x1C59), I(0xA620, 0xA629), I(0xA8D0, 0xA8D9), I(0xA900, 0xA909), I(0xAA50, 0xAA59), I(0x1A80, 0x1A89), I(0x1A90, 0x1A99), I(0xA9D0, 0xA9D9), I(0xABF0, 0xABF9), I(0x11066, 0x1106F)));
    addProperty("Nl", Arrays.asList(I(0x2160, 0x2182), I(0x2185, 0x2188), I(0x10140, 0x10174), I(0x16EE, 0x16F0), I(0x3007, 0x3007), I(0x3021, 0x3029), I(0x3038, 0x303A), I(0x10341, 0x10341), I(0x1034A, 0x1034A), I(0x103D1, 0x103D5), I(0x12400, 0x12462), I(0xA6E6, 0xA6EF)));
    addProperty("No", Arrays.asList(I(0x00B2, 0x00B3), I(0x00B9, 0x00B9), I(0x00BC, 0x00BE), I(0x2070, 0x2070), I(0x2074, 0x2079), I(0x2080, 0x2089), I(0x2150, 0x215F), I(0x2189, 0x2189), I(0x2460, 0x249B), I(0x24EA, 0x24FF), I(0x2776, 0x2793), I(0x3192, 0x3195), I(0x3220, 0x3229), I(0x3251, 0x325F), I(0x3280, 0x3289), I(0x32B1, 0x32BF), I(0xA830, 0xA835), I(0x10107, 0x10133), I(0x1D360, 0x1D371), I(0x1F100, 0x1F10A), I(0x10175, 0x10178), I(0x1018A, 0x1018A), I(0x10E60, 0x10E7E), I(0x09F4, 0x09F9), I(0x0B72, 0x0B77), I(0x0BF0, 0x0BF2), I(0x0C78, 0x0C7E), I(0x0D70, 0x0D75), I(0x0F2A, 0x0F33), I(0x1369, 0x137C), I(0x17F0, 0x17F9), I(0x10320, 0x10323), I(0x2CFD, 0x2CFD), I(0x19DA, 0x19DA), I(0x10A40, 0x10A47), I(0x10916, 0x1091B), I(0x10858, 0x1085F), I(0x10A7D, 0x10A7E), I(0x10B58, 0x10B5F), I(0x10B78, 0x10B7F), I(0x11052, 0x11065)));
    addProperty("Pc", Arrays.asList(I(0x005F, 0x005F), I(0x203F, 0x2040), I(0x2054, 0x2054), I(0xFE33, 0xFE34), I(0xFE4D, 0xFE4F), I(0xFF3F, 0xFF3F)));
    addProperty("Pd", Arrays.asList(I(0x002D, 0x002D), I(0x2010, 0x2015), I(0x2E17, 0x2E17), I(0x2E1A, 0x2E1A), I(0x301C, 0x301C), I(0x3030, 0x3030), I(0x30A0, 0x30A0), I(0xFE31, 0xFE32), I(0xFE58, 0xFE58), I(0xFE63, 0xFE63), I(0xFF0D, 0xFF0D), I(0x058A, 0x058A), I(0x05BE, 0x05BE), I(0x1400, 0x1400), I(0x1806, 0x1806)));
    addProperty("Pe", Arrays.asList(I(0x0029, 0x0029), I(0x005D, 0x005D), I(0x007D, 0x007D), I(0x2046, 0x2046), I(0x207E, 0x207E), I(0x208E, 0x208E), I(0x232A, 0x232A), I(0x2769, 0x2769), I(0x276B, 0x276B), I(0x276D, 0x276D), I(0x276F, 0x276F), I(0x2771, 0x2771), I(0x2773, 0x2773), I(0x2775, 0x2775), I(0x27C6, 0x27C6), I(0x27E7, 0x27E7), I(0x27E9, 0x27E9), I(0x27EB, 0x27EB), I(0x27ED, 0x27ED), I(0x27EF, 0x27EF), I(0x2984, 0x2984), I(0x2986, 0x2986), I(0x2988, 0x2988), I(0x298A, 0x298A), I(0x298C, 0x298C), I(0x298E, 0x298E), I(0x2990, 0x2990), I(0x2992, 0x2992), I(0x2994, 0x2994), I(0x2996, 0x2996), I(0x2998, 0x2998), I(0x29D9, 0x29D9), I(0x29DB, 0x29DB), I(0x29FD, 0x29FD), I(0x2E23, 0x2E23), I(0x2E25, 0x2E25), I(0x2E27, 0x2E27), I(0x2E29, 0x2E29), I(0x3009, 0x3009), I(0x300B, 0x300B), I(0x300D, 0x300D), I(0x300F, 0x300F), I(0x3011, 0x3011), I(0x3015, 0x3015), I(0x3017, 0x3017), I(0x3019, 0x3019), I(0x301B, 0x301B), I(0x301E, 0x301F), I(0xFD3F, 0xFD3F), I(0xFE18, 0xFE18), I(0xFE36, 0xFE36), I(0xFE38, 0xFE38), I(0xFE3A, 0xFE3A), I(0xFE3C, 0xFE3C), I(0xFE3E, 0xFE3E), I(0xFE40, 0xFE40), I(0xFE42, 0xFE42), I(0xFE44, 0xFE44), I(0xFE48, 0xFE48), I(0xFE5A, 0xFE5A), I(0xFE5C, 0xFE5C), I(0xFE5E, 0xFE5E), I(0xFF09, 0xFF09), I(0xFF3D, 0xFF3D), I(0xFF5D, 0xFF5D), I(0xFF60, 0xFF60), I(0xFF63, 0xFF63), I(0x0F3B, 0x0F3B), I(0x0F3D, 0x0F3D), I(0x169C, 0x169C)));
    addProperty("Pf", Arrays.asList(I(0x00BB, 0x00BB), I(0x2019, 0x2019), I(0x201D, 0x201D), I(0x203A, 0x203A), I(0x2E03, 0x2E03), I(0x2E05, 0x2E05), I(0x2E0A, 0x2E0A), I(0x2E0D, 0x2E0D), I(0x2E1D, 0x2E1D), I(0x2E21, 0x2E21)));
    addProperty("Pi", Arrays.asList(I(0x00AB, 0x00AB), I(0x2018, 0x2018), I(0x201B, 0x201C), I(0x201F, 0x201F), I(0x2039, 0x2039), I(0x2E02, 0x2E02), I(0x2E04, 0x2E04), I(0x2E09, 0x2E09), I(0x2E0C, 0x2E0C), I(0x2E1C, 0x2E1C), I(0x2E20, 0x2E20)));
    addProperty("Po", Arrays.asList(I(0x0021, 0x0023), I(0x0025, 0x0027), I(0x002A, 0x002A), I(0x002C, 0x002C), I(0x002E, 0x002F), I(0x003A, 0x003B), I(0x003F, 0x0040), I(0x005C, 0x005C), I(0x00A1, 0x00A1), I(0x00B7, 0x00B7), I(0x00BF, 0x00BF), I(0x037E, 0x037E), I(0x0387, 0x0387), I(0x0589, 0x0589), I(0x060C, 0x060C), I(0x061B, 0x061B), I(0x061F, 0x061F), I(0x0964, 0x0965), I(0x0970, 0x0970), I(0x10FB, 0x10FB), I(0x16EB, 0x16ED), I(0x1735, 0x1736), I(0x1802, 0x1803), I(0x1805, 0x1805), I(0x1CD3, 0x1CD3), I(0x2016, 0x2017), I(0x2020, 0x2027), I(0x2030, 0x2038), I(0x203B, 0x203E), I(0x2041, 0x2043), I(0x2047, 0x2051), I(0x2053, 0x2053), I(0x2055, 0x205E), I(0x2E00, 0x2E01), I(0x2E06, 0x2E08), I(0x2E0B, 0x2E0B), I(0x2E0E, 0x2E16), I(0x2E18, 0x2E19), I(0x2E1B, 0x2E1B), I(0x2E1E, 0x2E1F), I(0x2E2A, 0x2E2E), I(0x2E30, 0x2E31), I(0x3001, 0x3003), I(0x303D, 0x303D), I(0x30FB, 0x30FB), I(0xFE10, 0xFE16), I(0xFE19, 0xFE19), I(0xFE30, 0xFE30), I(0xFE45, 0xFE46), I(0xFE49, 0xFE4C), I(0xFE50, 0xFE52), I(0xFE54, 0xFE57), I(0xFE5F, 0xFE61), I(0xFE68, 0xFE68), I(0xFE6A, 0xFE6B), I(0xFF01, 0xFF03), I(0xFF05, 0xFF07), I(0xFF0A, 0xFF0A), I(0xFF0C, 0xFF0C), I(0xFF0E, 0xFF0F), I(0xFF1A, 0xFF1B), I(0xFF1F, 0xFF20), I(0xFF3C, 0xFF3C), I(0xFF61, 0xFF61), I(0xFF64, 0xFF65), I(0x10100, 0x10101), I(0xA673, 0xA673), I(0xA67E, 0xA67E), I(0x055A, 0x055F), I(0x05C0, 0x05C0), I(0x05C3, 0x05C3), I(0x05C6, 0x05C6), I(0x05F3, 0x05F4), I(0x0609, 0x060A), I(0x060D, 0x060D), I(0x061E, 0x061E), I(0x066A, 0x066D), I(0x06D4, 0x06D4), I(0x0700, 0x070D), I(0xA8F8, 0xA8FA), I(0x0DF4, 0x0DF4), I(0x0E4F, 0x0E4F), I(0x0E5A, 0x0E5B), I(0x0F04, 0x0F12), I(0x0F85, 0x0F85), I(0x0FD0, 0x0FD4), I(0x0FD9, 0x0FDA), I(0x104A, 0x104F), I(0x1361, 0x1368), I(0x166D, 0x166E), I(0x17D4, 0x17D6), I(0x17D8, 0x17DA), I(0x1800, 0x1801), I(0x1804, 0x1804), I(0x1807, 0x180A), I(0x1944, 0x1945), I(0x1039F, 0x1039F), I(0x1A1E, 0x1A1F), I(0x2CF9, 0x2CFC), I(0x2CFE, 0x2CFF), I(0x2D70, 0x2D70), I(0x103D0, 0x103D0), I(0x10A50, 0x10A58), I(0x1B5A, 0x1B60), I(0x12470, 0x12473), I(0x1091F, 0x1091F), I(0xA874, 0xA877), I(0x07F7, 0x07F9), I(0x1C3B, 0x1C3F), I(0x1C7E, 0x1C7F), I(0xA60D, 0xA60F), I(0xA8CE, 0xA8CF), I(0xA92E, 0xA92F), I(0xA95F, 0xA95F), I(0x1093F, 0x1093F), I(0xAA5C, 0xAA5F), I(0x1AA0, 0x1AA6), I(0x1AA8, 0x1AAD), I(0xAADE, 0xAADF), I(0x10B39, 0x10B3F), I(0x0830, 0x083E), I(0xA4FE, 0xA4FF), I(0xA6F2, 0xA6F7), I(0xA9C1, 0xA9CD), I(0xA9DE, 0xA9DF), I(0xABEB, 0xABEB), I(0x10857, 0x10857), I(0x10A7F, 0x10A7F), I(0x110BB, 0x110BC), I(0x110BE, 0x110C1), I(0x1BFC, 0x1BFF), I(0x11047, 0x1104D), I(0x085E, 0x085E)));
    addProperty("Ps", Arrays.asList(I(0x0028, 0x0028), I(0x005B, 0x005B), I(0x007B, 0x007B), I(0x201A, 0x201A), I(0x201E, 0x201E), I(0x2045, 0x2045), I(0x207D, 0x207D), I(0x208D, 0x208D), I(0x2329, 0x2329), I(0x2768, 0x2768), I(0x276A, 0x276A), I(0x276C, 0x276C), I(0x276E, 0x276E), I(0x2770, 0x2770), I(0x2772, 0x2772), I(0x2774, 0x2774), I(0x27C5, 0x27C5), I(0x27E6, 0x27E6), I(0x27E8, 0x27E8), I(0x27EA, 0x27EA), I(0x27EC, 0x27EC), I(0x27EE, 0x27EE), I(0x2983, 0x2983), I(0x2985, 0x2985), I(0x2987, 0x2987), I(0x2989, 0x2989), I(0x298B, 0x298B), I(0x298D, 0x298D), I(0x298F, 0x298F), I(0x2991, 0x2991), I(0x2993, 0x2993), I(0x2995, 0x2995), I(0x2997, 0x2997), I(0x29D8, 0x29D8), I(0x29DA, 0x29DA), I(0x29FC, 0x29FC), I(0x2E22, 0x2E22), I(0x2E24, 0x2E24), I(0x2E26, 0x2E26), I(0x2E28, 0x2E28), I(0x3008, 0x3008), I(0x300A, 0x300A), I(0x300C, 0x300C), I(0x300E, 0x300E), I(0x3010, 0x3010), I(0x3014, 0x3014), I(0x3016, 0x3016), I(0x3018, 0x3018), I(0x301A, 0x301A), I(0x301D, 0x301D), I(0xFD3E, 0xFD3E), I(0xFE17, 0xFE17), I(0xFE35, 0xFE35), I(0xFE37, 0xFE37), I(0xFE39, 0xFE39), I(0xFE3B, 0xFE3B), I(0xFE3D, 0xFE3D), I(0xFE3F, 0xFE3F), I(0xFE41, 0xFE41), I(0xFE43, 0xFE43), I(0xFE47, 0xFE47), I(0xFE59, 0xFE59), I(0xFE5B, 0xFE5B), I(0xFE5D, 0xFE5D), I(0xFF08, 0xFF08), I(0xFF3B, 0xFF3B), I(0xFF5B, 0xFF5B), I(0xFF5F, 0xFF5F), I(0xFF62, 0xFF62), I(0x0F3A, 0x0F3A), I(0x0F3C, 0x0F3C), I(0x169B, 0x169B)));
    addProperty("Sc", Arrays.asList(I(0x0024, 0x0024), I(0x00A2, 0x00A5), I(0x0E3F, 0x0E3F), I(0x20A0, 0x20B9), I(0xA838, 0xA838), I(0xFE69, 0xFE69), I(0xFF04, 0xFF04), I(0xFFE0, 0xFFE1), I(0xFFE5, 0xFFE6), I(0x060B, 0x060B), I(0xFDFC, 0xFDFC), I(0x09F2, 0x09F3), I(0x09FB, 0x09FB), I(0x0AF1, 0x0AF1), I(0x0BF9, 0x0BF9), I(0x17DB, 0x17DB)));
    addProperty("Sk", Arrays.asList(I(0x005E, 0x005E), I(0x0060, 0x0060), I(0x00A8, 0x00A8), I(0x00AF, 0x00AF), I(0x00B4, 0x00B4), I(0x00B8, 0x00B8), I(0x02C2, 0x02C5), I(0x02D2, 0x02DF), I(0x02E5, 0x02E9), I(0x02ED, 0x02ED), I(0x02EF, 0x02FF), I(0x0385, 0x0385), I(0x309B, 0x309C), I(0xA700, 0xA716), I(0xA720, 0xA721), I(0xA789, 0xA78A), I(0xFF3E, 0xFF3E), I(0xFF40, 0xFF40), I(0xFFE3, 0xFFE3), I(0x0375, 0x0375), I(0x0384, 0x0384), I(0x1FBD, 0x1FBD), I(0x1FBF, 0x1FC1), I(0x1FCD, 0x1FCF), I(0x1FDD, 0x1FDF), I(0x1FED, 0x1FEF), I(0x1FFD, 0x1FFE), I(0xFBB2, 0xFBC1), I(0x02EA, 0x02EB)));
    addProperty("Sm", Arrays.asList(I(0x002B, 0x002B), I(0x003C, 0x003E), I(0x007C, 0x007C), I(0x007E, 0x007E), I(0x00AC, 0x00AC), I(0x00B1, 0x00B1), I(0x00D7, 0x00D7), I(0x00F7, 0x00F7), I(0x2044, 0x2044), I(0x2052, 0x2052), I(0x207A, 0x207C), I(0x208A, 0x208C), I(0x2118, 0x2118), I(0x2140, 0x2144), I(0x214B, 0x214B), I(0x2190, 0x2194), I(0x219A, 0x219B), I(0x21A0, 0x21A0), I(0x21A3, 0x21A3), I(0x21A6, 0x21A6), I(0x21AE, 0x21AE), I(0x21CE, 0x21CF), I(0x21D2, 0x21D2), I(0x21D4, 0x21D4), I(0x21F4, 0x22FF), I(0x2308, 0x230B), I(0x2320, 0x2321), I(0x237C, 0x237C), I(0x239B, 0x23B3), I(0x23DC, 0x23E1), I(0x25B7, 0x25B7), I(0x25C1, 0x25C1), I(0x25F8, 0x25FF), I(0x266F, 0x266F), I(0x27C0, 0x27C4), I(0x27C7, 0x27CA), I(0x27CC, 0x27CC), I(0x27CE, 0x27E5), I(0x27F0, 0x27FF), I(0x2900, 0x2982), I(0x2999, 0x29D7), I(0x29DC, 0x29FB), I(0x29FE, 0x2AFF), I(0x2B30, 0x2B44), I(0x2B47, 0x2B4C), I(0xFE62, 0xFE62), I(0xFE64, 0xFE66), I(0xFF0B, 0xFF0B), I(0xFF1C, 0xFF1E), I(0xFF5C, 0xFF5C), I(0xFF5E, 0xFF5E), I(0xFFE2, 0xFFE2), I(0xFFE9, 0xFFEC), I(0x1D6C1, 0x1D6C1), I(0x1D6DB, 0x1D6DB), I(0x1D6FB, 0x1D6FB), I(0x1D715, 0x1D715), I(0x1D735, 0x1D735), I(0x1D74F, 0x1D74F), I(0x1D76F, 0x1D76F), I(0x1D789, 0x1D789), I(0x1D7A9, 0x1D7A9), I(0x1D7C3, 0x1D7C3), I(0x03F6, 0x03F6), I(0xFB29, 0xFB29), I(0x0606, 0x0608)));
    addProperty("So", Arrays.asList(I(0x00A6, 0x00A7), I(0x00A9, 0x00A9), I(0x00AE, 0x00AE), I(0x00B0, 0x00B0), I(0x00B6, 0x00B6), I(0x0FD5, 0x0FD8), I(0x2100, 0x2101), I(0x2103, 0x2106), I(0x2108, 0x2109), I(0x2114, 0x2114), I(0x2116, 0x2117), I(0x211E, 0x2123), I(0x2125, 0x2125), I(0x2127, 0x2127), I(0x2129, 0x2129), I(0x212E, 0x212E), I(0x213A, 0x213B), I(0x214A, 0x214A), I(0x214C, 0x214D), I(0x214F, 0x214F), I(0x2195, 0x2199), I(0x219C, 0x219F), I(0x21A1, 0x21A2), I(0x21A4, 0x21A5), I(0x21A7, 0x21AD), I(0x21AF, 0x21CD), I(0x21D0, 0x21D1), I(0x21D3, 0x21D3), I(0x21D5, 0x21F3), I(0x2300, 0x2307), I(0x230C, 0x231F), I(0x2322, 0x2328), I(0x232B, 0x237B), I(0x237D, 0x239A), I(0x23B4, 0x23DB), I(0x23E2, 0x23F3), I(0x2400, 0x2426), I(0x2440, 0x244A), I(0x249C, 0x24E9), I(0x2500, 0x25B6), I(0x25B8, 0x25C0), I(0x25C2, 0x25F7), I(0x2600, 0x266E), I(0x2670, 0x26FF), I(0x2701, 0x2767), I(0x2794, 0x27BF), I(0x2B00, 0x2B2F), I(0x2B45, 0x2B46), I(0x2B50, 0x2B59), I(0x2FF0, 0x2FFB), I(0x3004, 0x3004), I(0x3012, 0x3013), I(0x3020, 0x3020), I(0x3036, 0x3037), I(0x303E, 0x303F), I(0x3190, 0x3191), I(0x3196, 0x319F), I(0x31C0, 0x31E3), I(0x322A, 0x3250), I(0x327F, 0x327F), I(0x328A, 0x32B0), I(0x32C0, 0x32CF), I(0x3358, 0x33FF), I(0x4DC0, 0x4DFF), I(0xA836, 0xA837), I(0xA839, 0xA839), I(0xFDFD, 0xFDFD), I(0xFFE4, 0xFFE4), I(0xFFE8, 0xFFE8), I(0xFFED, 0xFFEE), I(0xFFFC, 0xFFFD), I(0x10102, 0x10102), I(0x10137, 0x1013F), I(0x10190, 0x1019B), I(0x101D0, 0x101FC), I(0x1D000, 0x1D0F5), I(0x1D100, 0x1D126), I(0x1D129, 0x1D164), I(0x1D16A, 0x1D16C), I(0x1D183, 0x1D184), I(0x1D18C, 0x1D1A9), I(0x1D1AE, 0x1D1DD), I(0x1D300, 0x1D356), I(0x1F000, 0x1F02B), I(0x1F030, 0x1F093), I(0x1F0A0, 0x1F0AE), I(0x1F0B1, 0x1F0BE), I(0x1F0C1, 0x1F0CF), I(0x1F0D1, 0x1F0DF), I(0x1F110, 0x1F12E), I(0x1F130, 0x1F169), I(0x1F170, 0x1F19A), I(0x1F1E6, 0x1F1FF), I(0x1F201, 0x1F202), I(0x1F210, 0x1F23A), I(0x1F240, 0x1F248), I(0x1F250, 0x1F251), I(0x1F300, 0x1F320), I(0x1F330, 0x1F335), I(0x1F337, 0x1F37C), I(0x1F380, 0x1F393), I(0x1F3A0, 0x1F3C4), I(0x1F3C6, 0x1F3CA), I(0x1F3E0, 0x1F3F0), I(0x1F400, 0x1F43E), I(0x1F440, 0x1F440), I(0x1F442, 0x1F4F7), I(0x1F4F9, 0x1F4FC), I(0x1F500, 0x1F53D), I(0x1F550, 0x1F567), I(0x1F5FB, 0x1F5FF), I(0x1F601, 0x1F610), I(0x1F612, 0x1F614), I(0x1F616, 0x1F616), I(0x1F618, 0x1F618), I(0x1F61A, 0x1F61A), I(0x1F61C, 0x1F61E), I(0x1F620, 0x1F625), I(0x1F628, 0x1F62B), I(0x1F62D, 0x1F62D), I(0x1F630, 0x1F633), I(0x1F635, 0x1F640), I(0x1F645, 0x1F64F), I(0x1F680, 0x1F6C5), I(0x1F700, 0x1F773), I(0x10179, 0x10189), I(0x1D200, 0x1D241), I(0x1D245, 0x1D245), I(0x0482, 0x0482), I(0x060E, 0x060F), I(0x06DE, 0x06DE), I(0x06E9, 0x06E9), I(0x06FD, 0x06FE), I(0x09FA, 0x09FA), I(0x0B70, 0x0B70), I(0x0BF3, 0x0BF8), I(0x0BFA, 0x0BFA), I(0x0C7F, 0x0C7F), I(0x0D79, 0x0D79), I(0x0F01, 0x0F03), I(0x0F13, 0x0F17), I(0x0F1A, 0x0F1F), I(0x0F34, 0x0F34), I(0x0F36, 0x0F36), I(0x0F38, 0x0F38), I(0x0FBE, 0x0FC5), I(0x0FC7, 0x0FCC), I(0x0FCE, 0x0FCF), I(0x109E, 0x109F), I(0xAA77, 0xAA79), I(0x3200, 0x321E), I(0x3260, 0x327E), I(0x1360, 0x1360), I(0x1390, 0x1399), I(0x19E0, 0x19FF), I(0x1F200, 0x1F200), I(0x32D0, 0x32FE), I(0x3300, 0x3357), I(0x2E80, 0x2E99), I(0x2E9B, 0x2EF3), I(0x2F00, 0x2FD5), I(0xA490, 0xA4C6), I(0x1940, 0x1940), I(0x2800, 0x28FF), I(0x2CE5, 0x2CEA), I(0x19DE, 0x19DF), I(0xA828, 0xA82B), I(0x1B61, 0x1B6A), I(0x1B74, 0x1B7C), I(0x07F6, 0x07F6)));
    addProperty("Zl", Arrays.asList(I(0x2028, 0x2028)));
    addProperty("Zp", Arrays.asList(I(0x2029, 0x2029)));
    addProperty("Zs", Arrays.asList(I(0x0020, 0x0020), I(0x00A0, 0x00A0), I(0x2000, 0x200A), I(0x202F, 0x202F), I(0x205F, 0x205F), I(0x3000, 0x3000), I(0x1680, 0x1680), I(0x180E, 0x180E)));
  }

  // generated by generate_unicode_c_and_l_properties.py
  private static void initCProperties() {
    addProperty("Cc", Arrays.asList(I(0x0, 0x1f), I(0x7f, 0x9f)));
    addProperty("Cf", Arrays.asList(I(0xad, 0xad), I(0x600, 0x603), I(0x6dd, 0x6dd), I(0x70f, 0x70f), I(0x17b4, 0x17b5), I(0x200b, 0x200f), I(0x202a, 0x202e), I(0x2060, 0x2064), I(0x206a, 0x206f), I(0xfeff, 0xfeff), I(0xfff9, 0xfffb), I(0x110bd, 0x110bd), I(0x1d173, 0x1d17a), I(0xe0001, 0xe0001), I(0xe0020, 0xe007f)));
    addProperty("Cn", Arrays.asList(I(0x378, 0x379), I(0x37f, 0x383), I(0x38b, 0x38b), I(0x38d, 0x38d), I(0x3a2, 0x3a2), I(0x528, 0x530), I(0x557, 0x558), I(0x560, 0x560), I(0x588, 0x588), I(0x58b, 0x590), I(0x5c8, 0x5cf), I(0x5eb, 0x5ef), I(0x5f5, 0x5ff), I(0x604, 0x605), I(0x61c, 0x61d), I(0x70e, 0x70e), I(0x74b, 0x74c), I(0x7b2, 0x7bf), I(0x7fb, 0x7ff), I(0x82e, 0x82f), I(0x83f, 0x83f), I(0x85c, 0x85d), I(0x85f, 0x8ff), I(0x978, 0x978), I(0x980, 0x980), I(0x984, 0x984), I(0x98d, 0x98e), I(0x991, 0x992), I(0x9a9, 0x9a9), I(0x9b1, 0x9b1), I(0x9b3, 0x9b5), I(0x9ba, 0x9bb), I(0x9c5, 0x9c6), I(0x9c9, 0x9ca), I(0x9cf, 0x9d6), I(0x9d8, 0x9db), I(0x9de, 0x9de), I(0x9e4, 0x9e5), I(0x9fc, 0xa00), I(0xa04, 0xa04), I(0xa0b, 0xa0e), I(0xa11, 0xa12), I(0xa29, 0xa29), I(0xa31, 0xa31), I(0xa34, 0xa34), I(0xa37, 0xa37), I(0xa3a, 0xa3b), I(0xa3d, 0xa3d), I(0xa43, 0xa46), I(0xa49, 0xa4a), I(0xa4e, 0xa50), I(0xa52, 0xa58), I(0xa5d, 0xa5d), I(0xa5f, 0xa65), I(0xa76, 0xa80), I(0xa84, 0xa84), I(0xa8e, 0xa8e), I(0xa92, 0xa92), I(0xaa9, 0xaa9), I(0xab1, 0xab1), I(0xab4, 0xab4), I(0xaba, 0xabb), I(0xac6, 0xac6), I(0xaca, 0xaca), I(0xace, 0xacf), I(0xad1, 0xadf), I(0xae4, 0xae5), I(0xaf0, 0xaf0), I(0xaf2, 0xb00), I(0xb04, 0xb04), I(0xb0d, 0xb0e), I(0xb11, 0xb12), I(0xb29, 0xb29), I(0xb31, 0xb31), I(0xb34, 0xb34), I(0xb3a, 0xb3b), I(0xb45, 0xb46), I(0xb49, 0xb4a), I(0xb4e, 0xb55), I(0xb58, 0xb5b), I(0xb5e, 0xb5e), I(0xb64, 0xb65), I(0xb78, 0xb81), I(0xb84, 0xb84), I(0xb8b, 0xb8d), I(0xb91, 0xb91), I(0xb96, 0xb98), I(0xb9b, 0xb9b), I(0xb9d, 0xb9d), I(0xba0, 0xba2), I(0xba5, 0xba7), I(0xbab, 0xbad), I(0xbba, 0xbbd), I(0xbc3, 0xbc5), I(0xbc9, 0xbc9), I(0xbce, 0xbcf), I(0xbd1, 0xbd6), I(0xbd8, 0xbe5), I(0xbfb, 0xc00), I(0xc04, 0xc04), I(0xc0d, 0xc0d), I(0xc11, 0xc11), I(0xc29, 0xc29), I(0xc34, 0xc34), I(0xc3a, 0xc3c), I(0xc45, 0xc45), I(0xc49, 0xc49), I(0xc4e, 0xc54), I(0xc57, 0xc57), I(0xc5a, 0xc5f), I(0xc64, 0xc65), I(0xc70, 0xc77), I(0xc80, 0xc81), I(0xc84, 0xc84), I(0xc8d, 0xc8d), I(0xc91, 0xc91), I(0xca9, 0xca9), I(0xcb4, 0xcb4), I(0xcba, 0xcbb), I(0xcc5, 0xcc5), I(0xcc9, 0xcc9), I(0xcce, 0xcd4), I(0xcd7, 0xcdd), I(0xcdf, 0xcdf), I(0xce4, 0xce5), I(0xcf0, 0xcf0), I(0xcf3, 0xd01), I(0xd04, 0xd04), I(0xd0d, 0xd0d), I(0xd11, 0xd11), I(0xd3b, 0xd3c), I(0xd45, 0xd45), I(0xd49, 0xd49), I(0xd4f, 0xd56), I(0xd58, 0xd5f), I(0xd64, 0xd65), I(0xd76, 0xd78), I(0xd80, 0xd81), I(0xd84, 0xd84), I(0xd97, 0xd99), I(0xdb2, 0xdb2), I(0xdbc, 0xdbc), I(0xdbe, 0xdbf), I(0xdc7, 0xdc9), I(0xdcb, 0xdce), I(0xdd5, 0xdd5), I(0xdd7, 0xdd7), I(0xde0, 0xdf1), I(0xdf5, 0xe00), I(0xe3b, 0xe3e), I(0xe5c, 0xe80), I(0xe83, 0xe83), I(0xe85, 0xe86), I(0xe89, 0xe89), I(0xe8b, 0xe8c), I(0xe8e, 0xe93), I(0xe98, 0xe98), I(0xea0, 0xea0), I(0xea4, 0xea4), I(0xea6, 0xea6), I(0xea8, 0xea9), I(0xeac, 0xeac), I(0xeba, 0xeba), I(0xebe, 0xebf), I(0xec5, 0xec5), I(0xec7, 0xec7), I(0xece, 0xecf), I(0xeda, 0xedb), I(0xede, 0xeff), I(0xf48, 0xf48), I(0xf6d, 0xf70), I(0xf98, 0xf98), I(0xfbd, 0xfbd), I(0xfcd, 0xfcd), I(0xfdb, 0xfff), I(0x10c6, 0x10cf), I(0x10fd, 0x10ff), I(0x1249, 0x1249), I(0x124e, 0x124f), I(0x1257, 0x1257), I(0x1259, 0x1259), I(0x125e, 0x125f), I(0x1289, 0x1289), I(0x128e, 0x128f), I(0x12b1, 0x12b1), I(0x12b6, 0x12b7), I(0x12bf, 0x12bf), I(0x12c1, 0x12c1), I(0x12c6, 0x12c7), I(0x12d7, 0x12d7), I(0x1311, 0x1311), I(0x1316, 0x1317), I(0x135b, 0x135c), I(0x137d, 0x137f), I(0x139a, 0x139f), I(0x13f5, 0x13ff), I(0x169d, 0x169f), I(0x16f1, 0x16ff), I(0x170d, 0x170d), I(0x1715, 0x171f), I(0x1737, 0x173f), I(0x1754, 0x175f), I(0x176d, 0x176d), I(0x1771, 0x1771), I(0x1774, 0x177f), I(0x17de, 0x17df), I(0x17ea, 0x17ef), I(0x17fa, 0x17ff), I(0x180f, 0x180f), I(0x181a, 0x181f), I(0x1878, 0x187f), I(0x18ab, 0x18af), I(0x18f6, 0x18ff), I(0x191d, 0x191f), I(0x192c, 0x192f), I(0x193c, 0x193f), I(0x1941, 0x1943), I(0x196e, 0x196f), I(0x1975, 0x197f), I(0x19ac, 0x19af), I(0x19ca, 0x19cf), I(0x19db, 0x19dd), I(0x1a1c, 0x1a1d), I(0x1a5f, 0x1a5f), I(0x1a7d, 0x1a7e), I(0x1a8a, 0x1a8f), I(0x1a9a, 0x1a9f), I(0x1aae, 0x1aff), I(0x1b4c, 0x1b4f), I(0x1b7d, 0x1b7f), I(0x1bab, 0x1bad), I(0x1bba, 0x1bbf), I(0x1bf4, 0x1bfb), I(0x1c38, 0x1c3a), I(0x1c4a, 0x1c4c), I(0x1c80, 0x1ccf), I(0x1cf3, 0x1cff), I(0x1de7, 0x1dfb), I(0x1f16, 0x1f17), I(0x1f1e, 0x1f1f), I(0x1f46, 0x1f47), I(0x1f4e, 0x1f4f), I(0x1f58, 0x1f58), I(0x1f5a, 0x1f5a), I(0x1f5c, 0x1f5c), I(0x1f5e, 0x1f5e), I(0x1f7e, 0x1f7f), I(0x1fb5, 0x1fb5), I(0x1fc5, 0x1fc5), I(0x1fd4, 0x1fd5), I(0x1fdc, 0x1fdc), I(0x1ff0, 0x1ff1), I(0x1ff5, 0x1ff5), I(0x1fff, 0x1fff), I(0x2065, 0x2069), I(0x2072, 0x2073), I(0x208f, 0x208f), I(0x209d, 0x209f), I(0x20ba, 0x20cf), I(0x20f1, 0x20ff), I(0x218a, 0x218f), I(0x23f4, 0x23ff), I(0x2427, 0x243f), I(0x244b, 0x245f), I(0x2700, 0x2700), I(0x27cb, 0x27cb), I(0x27cd, 0x27cd), I(0x2b4d, 0x2b4f), I(0x2b5a, 0x2bff), I(0x2c2f, 0x2c2f), I(0x2c5f, 0x2c5f), I(0x2cf2, 0x2cf8), I(0x2d26, 0x2d2f), I(0x2d66, 0x2d6e), I(0x2d71, 0x2d7e), I(0x2d97, 0x2d9f), I(0x2da7, 0x2da7), I(0x2daf, 0x2daf), I(0x2db7, 0x2db7), I(0x2dbf, 0x2dbf), I(0x2dc7, 0x2dc7), I(0x2dcf, 0x2dcf), I(0x2dd7, 0x2dd7), I(0x2ddf, 0x2ddf), I(0x2e32, 0x2e7f), I(0x2e9a, 0x2e9a), I(0x2ef4, 0x2eff), I(0x2fd6, 0x2fef), I(0x2ffc, 0x2fff), I(0x3040, 0x3040), I(0x3097, 0x3098), I(0x3100, 0x3104), I(0x312e, 0x3130), I(0x318f, 0x318f), I(0x31bb, 0x31bf), I(0x31e4, 0x31ef), I(0x321f, 0x321f), I(0x32ff, 0x32ff), I(0x4db6, 0x4dbf), I(0x9fcc, 0x9fff), I(0xa48d, 0xa48f), I(0xa4c7, 0xa4cf), I(0xa62c, 0xa63f), I(0xa674, 0xa67b), I(0xa698, 0xa69f), I(0xa6f8, 0xa6ff), I(0xa78f, 0xa78f), I(0xa792, 0xa79f), I(0xa7aa, 0xa7f9), I(0xa82c, 0xa82f), I(0xa83a, 0xa83f), I(0xa878, 0xa87f), I(0xa8c5, 0xa8cd), I(0xa8da, 0xa8df), I(0xa8fc, 0xa8ff), I(0xa954, 0xa95e), I(0xa97d, 0xa97f), I(0xa9ce, 0xa9ce), I(0xa9da, 0xa9dd), I(0xa9e0, 0xa9ff), I(0xaa37, 0xaa3f), I(0xaa4e, 0xaa4f), I(0xaa5a, 0xaa5b), I(0xaa7c, 0xaa7f), I(0xaac3, 0xaada), I(0xaae0, 0xab00), I(0xab07, 0xab08), I(0xab0f, 0xab10), I(0xab17, 0xab1f), I(0xab27, 0xab27), I(0xab2f, 0xabbf), I(0xabee, 0xabef), I(0xabfa, 0xabff), I(0xd7a4, 0xd7af), I(0xd7c7, 0xd7ca), I(0xd7fc, 0xd7ff), I(0xfa2e, 0xfa2f), I(0xfa6e, 0xfa6f), I(0xfada, 0xfaff), I(0xfb07, 0xfb12), I(0xfb18, 0xfb1c), I(0xfb37, 0xfb37), I(0xfb3d, 0xfb3d), I(0xfb3f, 0xfb3f), I(0xfb42, 0xfb42), I(0xfb45, 0xfb45), I(0xfbc2, 0xfbd2), I(0xfd40, 0xfd4f), I(0xfd90, 0xfd91), I(0xfdc8, 0xfdef), I(0xfdfe, 0xfdff), I(0xfe1a, 0xfe1f), I(0xfe27, 0xfe2f), I(0xfe53, 0xfe53), I(0xfe67, 0xfe67), I(0xfe6c, 0xfe6f), I(0xfe75, 0xfe75), I(0xfefd, 0xfefe), I(0xff00, 0xff00), I(0xffbf, 0xffc1), I(0xffc8, 0xffc9), I(0xffd0, 0xffd1), I(0xffd8, 0xffd9), I(0xffdd, 0xffdf), I(0xffe7, 0xffe7), I(0xffef, 0xfff8), I(0xfffe, 0xffff), I(0x1000c, 0x1000c), I(0x10027, 0x10027), I(0x1003b, 0x1003b), I(0x1003e, 0x1003e), I(0x1004e, 0x1004f), I(0x1005e, 0x1007f), I(0x100fb, 0x100ff), I(0x10103, 0x10106), I(0x10134, 0x10136), I(0x1018b, 0x1018f), I(0x1019c, 0x101cf), I(0x101fe, 0x1027f), I(0x1029d, 0x1029f), I(0x102d1, 0x102ff), I(0x1031f, 0x1031f), I(0x10324, 0x1032f), I(0x1034b, 0x1037f), I(0x1039e, 0x1039e), I(0x103c4, 0x103c7), I(0x103d6, 0x103ff), I(0x1049e, 0x1049f), I(0x104aa, 0x107ff), I(0x10806, 0x10807), I(0x10809, 0x10809), I(0x10836, 0x10836), I(0x10839, 0x1083b), I(0x1083d, 0x1083e), I(0x10856, 0x10856), I(0x10860, 0x108ff), I(0x1091c, 0x1091e), I(0x1093a, 0x1093e), I(0x10940, 0x109ff), I(0x10a04, 0x10a04), I(0x10a07, 0x10a0b), I(0x10a14, 0x10a14), I(0x10a18, 0x10a18), I(0x10a34, 0x10a37), I(0x10a3b, 0x10a3e), I(0x10a48, 0x10a4f), I(0x10a59, 0x10a5f), I(0x10a80, 0x10aff), I(0x10b36, 0x10b38), I(0x10b56, 0x10b57), I(0x10b73, 0x10b77), I(0x10b80, 0x10bff), I(0x10c49, 0x10e5f), I(0x10e7f, 0x10fff), I(0x1104e, 0x11051), I(0x11070, 0x1107f), I(0x110c2, 0x11fff), I(0x1236f, 0x123ff), I(0x12463, 0x1246f), I(0x12474, 0x12fff), I(0x1342f, 0x167ff), I(0x16a39, 0x1afff), I(0x1b002, 0x1cfff), I(0x1d0f6, 0x1d0ff), I(0x1d127, 0x1d128), I(0x1d1de, 0x1d1ff), I(0x1d246, 0x1d2ff), I(0x1d357, 0x1d35f), I(0x1d372, 0x1d3ff), I(0x1d455, 0x1d455), I(0x1d49d, 0x1d49d), I(0x1d4a0, 0x1d4a1), I(0x1d4a3, 0x1d4a4), I(0x1d4a7, 0x1d4a8), I(0x1d4ad, 0x1d4ad), I(0x1d4ba, 0x1d4ba), I(0x1d4bc, 0x1d4bc), I(0x1d4c4, 0x1d4c4), I(0x1d506, 0x1d506), I(0x1d50b, 0x1d50c), I(0x1d515, 0x1d515), I(0x1d51d, 0x1d51d), I(0x1d53a, 0x1d53a), I(0x1d53f, 0x1d53f), I(0x1d545, 0x1d545), I(0x1d547, 0x1d549), I(0x1d551, 0x1d551), I(0x1d6a6, 0x1d6a7), I(0x1d7cc, 0x1d7cd), I(0x1d800, 0x1efff), I(0x1f02c, 0x1f02f), I(0x1f094, 0x1f09f), I(0x1f0af, 0x1f0b0), I(0x1f0bf, 0x1f0c0), I(0x1f0d0, 0x1f0d0), I(0x1f0e0, 0x1f0ff), I(0x1f10b, 0x1f10f), I(0x1f12f, 0x1f12f), I(0x1f16a, 0x1f16f), I(0x1f19b, 0x1f1e5), I(0x1f203, 0x1f20f), I(0x1f23b, 0x1f23f), I(0x1f249, 0x1f24f), I(0x1f252, 0x1f2ff), I(0x1f321, 0x1f32f), I(0x1f336, 0x1f336), I(0x1f37d, 0x1f37f), I(0x1f394, 0x1f39f), I(0x1f3c5, 0x1f3c5), I(0x1f3cb, 0x1f3df), I(0x1f3f1, 0x1f3ff), I(0x1f43f, 0x1f43f), I(0x1f441, 0x1f441), I(0x1f4f8, 0x1f4f8), I(0x1f4fd, 0x1f4ff), I(0x1f53e, 0x1f54f), I(0x1f568, 0x1f5fa), I(0x1f600, 0x1f600), I(0x1f611, 0x1f611), I(0x1f615, 0x1f615), I(0x1f617, 0x1f617), I(0x1f619, 0x1f619), I(0x1f61b, 0x1f61b), I(0x1f61f, 0x1f61f), I(0x1f626, 0x1f627), I(0x1f62c, 0x1f62c), I(0x1f62e, 0x1f62f), I(0x1f634, 0x1f634), I(0x1f641, 0x1f644), I(0x1f650, 0x1f67f), I(0x1f6c6, 0x1f6ff), I(0x1f774, 0x1ffff), I(0x2a6d7, 0x2a6ff), I(0x2b735, 0x2b73f), I(0x2b81e, 0x2f7ff), I(0x2fa1e, 0xe0000), I(0xe0002, 0xe001f), I(0xe0080, 0xe00ff), I(0xe01f0, 0xeffff), I(0xffffe, 0xfffff), I(0x10fffe, 0x10ffff)));
    addProperty("Co", Arrays.asList(I(0xe000, 0xf8ff), I(0xf0000, 0xffffd), I(0x100000, 0x10fffd)));
    addProperty("Cs", Arrays.asList(I(0xd800, 0xdfff)));
  }

  private static void initLProperties() {
    addProperty("Ll", Arrays.asList(I(0x61, 0x7a), I(0xaa, 0xaa), I(0xb5, 0xb5), I(0xba, 0xba), I(0xdf, 0xf6), I(0xf8, 0xff), I(0x101, 0x101), I(0x103, 0x103), I(0x105, 0x105), I(0x107, 0x107), I(0x109, 0x109), I(0x10b, 0x10b), I(0x10d, 0x10d), I(0x10f, 0x10f), I(0x111, 0x111), I(0x113, 0x113), I(0x115, 0x115), I(0x117, 0x117), I(0x119, 0x119), I(0x11b, 0x11b), I(0x11d, 0x11d), I(0x11f, 0x11f), I(0x121, 0x121), I(0x123, 0x123), I(0x125, 0x125), I(0x127, 0x127), I(0x129, 0x129), I(0x12b, 0x12b), I(0x12d, 0x12d), I(0x12f, 0x12f), I(0x131, 0x131), I(0x133, 0x133), I(0x135, 0x135), I(0x137, 0x138), I(0x13a, 0x13a), I(0x13c, 0x13c), I(0x13e, 0x13e), I(0x140, 0x140), I(0x142, 0x142), I(0x144, 0x144), I(0x146, 0x146), I(0x148, 0x149), I(0x14b, 0x14b), I(0x14d, 0x14d), I(0x14f, 0x14f), I(0x151, 0x151), I(0x153, 0x153), I(0x155, 0x155), I(0x157, 0x157), I(0x159, 0x159), I(0x15b, 0x15b), I(0x15d, 0x15d), I(0x15f, 0x15f), I(0x161, 0x161), I(0x163, 0x163), I(0x165, 0x165), I(0x167, 0x167), I(0x169, 0x169), I(0x16b, 0x16b), I(0x16d, 0x16d), I(0x16f, 0x16f), I(0x171, 0x171), I(0x173, 0x173), I(0x175, 0x175), I(0x177, 0x177), I(0x17a, 0x17a), I(0x17c, 0x17c), I(0x17e, 0x180), I(0x183, 0x183), I(0x185, 0x185), I(0x188, 0x188), I(0x18c, 0x18d), I(0x192, 0x192), I(0x195, 0x195), I(0x199, 0x19b), I(0x19e, 0x19e), I(0x1a1, 0x1a1), I(0x1a3, 0x1a3), I(0x1a5, 0x1a5), I(0x1a8, 0x1a8), I(0x1aa, 0x1ab), I(0x1ad, 0x1ad), I(0x1b0, 0x1b0), I(0x1b4, 0x1b4), I(0x1b6, 0x1b6), I(0x1b9, 0x1ba), I(0x1bd, 0x1bf), I(0x1c6, 0x1c6), I(0x1c9, 0x1c9), I(0x1cc, 0x1cc), I(0x1ce, 0x1ce), I(0x1d0, 0x1d0), I(0x1d2, 0x1d2), I(0x1d4, 0x1d4), I(0x1d6, 0x1d6), I(0x1d8, 0x1d8), I(0x1da, 0x1da), I(0x1dc, 0x1dd), I(0x1df, 0x1df), I(0x1e1, 0x1e1), I(0x1e3, 0x1e3), I(0x1e5, 0x1e5), I(0x1e7, 0x1e7), I(0x1e9, 0x1e9), I(0x1eb, 0x1eb), I(0x1ed, 0x1ed), I(0x1ef, 0x1f0), I(0x1f3, 0x1f3), I(0x1f5, 0x1f5), I(0x1f9, 0x1f9), I(0x1fb, 0x1fb), I(0x1fd, 0x1fd), I(0x1ff, 0x1ff), I(0x201, 0x201), I(0x203, 0x203), I(0x205, 0x205), I(0x207, 0x207), I(0x209, 0x209), I(0x20b, 0x20b), I(0x20d, 0x20d), I(0x20f, 0x20f), I(0x211, 0x211), I(0x213, 0x213), I(0x215, 0x215), I(0x217, 0x217), I(0x219, 0x219), I(0x21b, 0x21b), I(0x21d, 0x21d), I(0x21f, 0x21f), I(0x221, 0x221), I(0x223, 0x223), I(0x225, 0x225), I(0x227, 0x227), I(0x229, 0x229), I(0x22b, 0x22b), I(0x22d, 0x22d), I(0x22f, 0x22f), I(0x231, 0x231), I(0x233, 0x239), I(0x23c, 0x23c), I(0x23f, 0x240), I(0x242, 0x242), I(0x247, 0x247), I(0x249, 0x249), I(0x24b, 0x24b), I(0x24d, 0x24d), I(0x24f, 0x293), I(0x295, 0x2af), I(0x371, 0x371), I(0x373, 0x373), I(0x377, 0x377), I(0x37b, 0x37d), I(0x390, 0x390), I(0x3ac, 0x3ce), I(0x3d0, 0x3d1), I(0x3d5, 0x3d7), I(0x3d9, 0x3d9), I(0x3db, 0x3db), I(0x3dd, 0x3dd), I(0x3df, 0x3df), I(0x3e1, 0x3e1), I(0x3e3, 0x3e3), I(0x3e5, 0x3e5), I(0x3e7, 0x3e7), I(0x3e9, 0x3e9), I(0x3eb, 0x3eb), I(0x3ed, 0x3ed), I(0x3ef, 0x3f3), I(0x3f5, 0x3f5), I(0x3f8, 0x3f8), I(0x3fb, 0x3fc), I(0x430, 0x45f), I(0x461, 0x461), I(0x463, 0x463), I(0x465, 0x465), I(0x467, 0x467), I(0x469, 0x469), I(0x46b, 0x46b), I(0x46d, 0x46d), I(0x46f, 0x46f), I(0x471, 0x471), I(0x473, 0x473), I(0x475, 0x475), I(0x477, 0x477), I(0x479, 0x479), I(0x47b, 0x47b), I(0x47d, 0x47d), I(0x47f, 0x47f), I(0x481, 0x481), I(0x48b, 0x48b), I(0x48d, 0x48d), I(0x48f, 0x48f), I(0x491, 0x491), I(0x493, 0x493), I(0x495, 0x495), I(0x497, 0x497), I(0x499, 0x499), I(0x49b, 0x49b), I(0x49d, 0x49d), I(0x49f, 0x49f), I(0x4a1, 0x4a1), I(0x4a3, 0x4a3), I(0x4a5, 0x4a5), I(0x4a7, 0x4a7), I(0x4a9, 0x4a9), I(0x4ab, 0x4ab), I(0x4ad, 0x4ad), I(0x4af, 0x4af), I(0x4b1, 0x4b1), I(0x4b3, 0x4b3), I(0x4b5, 0x4b5), I(0x4b7, 0x4b7), I(0x4b9, 0x4b9), I(0x4bb, 0x4bb), I(0x4bd, 0x4bd), I(0x4bf, 0x4bf), I(0x4c2, 0x4c2), I(0x4c4, 0x4c4), I(0x4c6, 0x4c6), I(0x4c8, 0x4c8), I(0x4ca, 0x4ca), I(0x4cc, 0x4cc), I(0x4ce, 0x4cf), I(0x4d1, 0x4d1), I(0x4d3, 0x4d3), I(0x4d5, 0x4d5), I(0x4d7, 0x4d7), I(0x4d9, 0x4d9), I(0x4db, 0x4db), I(0x4dd, 0x4dd), I(0x4df, 0x4df), I(0x4e1, 0x4e1), I(0x4e3, 0x4e3), I(0x4e5, 0x4e5), I(0x4e7, 0x4e7), I(0x4e9, 0x4e9), I(0x4eb, 0x4eb), I(0x4ed, 0x4ed), I(0x4ef, 0x4ef), I(0x4f1, 0x4f1), I(0x4f3, 0x4f3), I(0x4f5, 0x4f5), I(0x4f7, 0x4f7), I(0x4f9, 0x4f9), I(0x4fb, 0x4fb), I(0x4fd, 0x4fd), I(0x4ff, 0x4ff), I(0x501, 0x501), I(0x503, 0x503), I(0x505, 0x505), I(0x507, 0x507), I(0x509, 0x509), I(0x50b, 0x50b), I(0x50d, 0x50d), I(0x50f, 0x50f), I(0x511, 0x511), I(0x513, 0x513), I(0x515, 0x515), I(0x517, 0x517), I(0x519, 0x519), I(0x51b, 0x51b), I(0x51d, 0x51d), I(0x51f, 0x51f), I(0x521, 0x521), I(0x523, 0x523), I(0x525, 0x525), I(0x527, 0x527), I(0x561, 0x587), I(0x1d00, 0x1d2b), I(0x1d62, 0x1d77), I(0x1d79, 0x1d9a), I(0x1e01, 0x1e01), I(0x1e03, 0x1e03), I(0x1e05, 0x1e05), I(0x1e07, 0x1e07), I(0x1e09, 0x1e09), I(0x1e0b, 0x1e0b), I(0x1e0d, 0x1e0d), I(0x1e0f, 0x1e0f), I(0x1e11, 0x1e11), I(0x1e13, 0x1e13), I(0x1e15, 0x1e15), I(0x1e17, 0x1e17), I(0x1e19, 0x1e19), I(0x1e1b, 0x1e1b), I(0x1e1d, 0x1e1d), I(0x1e1f, 0x1e1f), I(0x1e21, 0x1e21), I(0x1e23, 0x1e23), I(0x1e25, 0x1e25), I(0x1e27, 0x1e27), I(0x1e29, 0x1e29), I(0x1e2b, 0x1e2b), I(0x1e2d, 0x1e2d), I(0x1e2f, 0x1e2f), I(0x1e31, 0x1e31), I(0x1e33, 0x1e33), I(0x1e35, 0x1e35), I(0x1e37, 0x1e37), I(0x1e39, 0x1e39), I(0x1e3b, 0x1e3b), I(0x1e3d, 0x1e3d), I(0x1e3f, 0x1e3f), I(0x1e41, 0x1e41), I(0x1e43, 0x1e43), I(0x1e45, 0x1e45), I(0x1e47, 0x1e47), I(0x1e49, 0x1e49), I(0x1e4b, 0x1e4b), I(0x1e4d, 0x1e4d), I(0x1e4f, 0x1e4f), I(0x1e51, 0x1e51), I(0x1e53, 0x1e53), I(0x1e55, 0x1e55), I(0x1e57, 0x1e57), I(0x1e59, 0x1e59), I(0x1e5b, 0x1e5b), I(0x1e5d, 0x1e5d), I(0x1e5f, 0x1e5f), I(0x1e61, 0x1e61), I(0x1e63, 0x1e63), I(0x1e65, 0x1e65), I(0x1e67, 0x1e67), I(0x1e69, 0x1e69), I(0x1e6b, 0x1e6b), I(0x1e6d, 0x1e6d), I(0x1e6f, 0x1e6f), I(0x1e71, 0x1e71), I(0x1e73, 0x1e73), I(0x1e75, 0x1e75), I(0x1e77, 0x1e77), I(0x1e79, 0x1e79), I(0x1e7b, 0x1e7b), I(0x1e7d, 0x1e7d), I(0x1e7f, 0x1e7f), I(0x1e81, 0x1e81), I(0x1e83, 0x1e83), I(0x1e85, 0x1e85), I(0x1e87, 0x1e87), I(0x1e89, 0x1e89), I(0x1e8b, 0x1e8b), I(0x1e8d, 0x1e8d), I(0x1e8f, 0x1e8f), I(0x1e91, 0x1e91), I(0x1e93, 0x1e93), I(0x1e95, 0x1e9d), I(0x1e9f, 0x1e9f), I(0x1ea1, 0x1ea1), I(0x1ea3, 0x1ea3), I(0x1ea5, 0x1ea5), I(0x1ea7, 0x1ea7), I(0x1ea9, 0x1ea9), I(0x1eab, 0x1eab), I(0x1ead, 0x1ead), I(0x1eaf, 0x1eaf), I(0x1eb1, 0x1eb1), I(0x1eb3, 0x1eb3), I(0x1eb5, 0x1eb5), I(0x1eb7, 0x1eb7), I(0x1eb9, 0x1eb9), I(0x1ebb, 0x1ebb), I(0x1ebd, 0x1ebd), I(0x1ebf, 0x1ebf), I(0x1ec1, 0x1ec1), I(0x1ec3, 0x1ec3), I(0x1ec5, 0x1ec5), I(0x1ec7, 0x1ec7), I(0x1ec9, 0x1ec9), I(0x1ecb, 0x1ecb), I(0x1ecd, 0x1ecd), I(0x1ecf, 0x1ecf), I(0x1ed1, 0x1ed1), I(0x1ed3, 0x1ed3), I(0x1ed5, 0x1ed5), I(0x1ed7, 0x1ed7), I(0x1ed9, 0x1ed9), I(0x1edb, 0x1edb), I(0x1edd, 0x1edd), I(0x1edf, 0x1edf), I(0x1ee1, 0x1ee1), I(0x1ee3, 0x1ee3), I(0x1ee5, 0x1ee5), I(0x1ee7, 0x1ee7), I(0x1ee9, 0x1ee9), I(0x1eeb, 0x1eeb), I(0x1eed, 0x1eed), I(0x1eef, 0x1eef), I(0x1ef1, 0x1ef1), I(0x1ef3, 0x1ef3), I(0x1ef5, 0x1ef5), I(0x1ef7, 0x1ef7), I(0x1ef9, 0x1ef9), I(0x1efb, 0x1efb), I(0x1efd, 0x1efd), I(0x1eff, 0x1f07), I(0x1f10, 0x1f15), I(0x1f20, 0x1f27), I(0x1f30, 0x1f37), I(0x1f40, 0x1f45), I(0x1f50, 0x1f57), I(0x1f60, 0x1f67), I(0x1f70, 0x1f7d), I(0x1f80, 0x1f87), I(0x1f90, 0x1f97), I(0x1fa0, 0x1fa7), I(0x1fb0, 0x1fb4), I(0x1fb6, 0x1fb7), I(0x1fbe, 0x1fbe), I(0x1fc2, 0x1fc4), I(0x1fc6, 0x1fc7), I(0x1fd0, 0x1fd3), I(0x1fd6, 0x1fd7), I(0x1fe0, 0x1fe7), I(0x1ff2, 0x1ff4), I(0x1ff6, 0x1ff7), I(0x210a, 0x210a), I(0x210e, 0x210f), I(0x2113, 0x2113), I(0x212f, 0x212f), I(0x2134, 0x2134), I(0x2139, 0x2139), I(0x213c, 0x213d), I(0x2146, 0x2149), I(0x214e, 0x214e), I(0x2184, 0x2184), I(0x2c30, 0x2c5e), I(0x2c61, 0x2c61), I(0x2c65, 0x2c66), I(0x2c68, 0x2c68), I(0x2c6a, 0x2c6a), I(0x2c6c, 0x2c6c), I(0x2c71, 0x2c71), I(0x2c73, 0x2c74), I(0x2c76, 0x2c7c), I(0x2c81, 0x2c81), I(0x2c83, 0x2c83), I(0x2c85, 0x2c85), I(0x2c87, 0x2c87), I(0x2c89, 0x2c89), I(0x2c8b, 0x2c8b), I(0x2c8d, 0x2c8d), I(0x2c8f, 0x2c8f), I(0x2c91, 0x2c91), I(0x2c93, 0x2c93), I(0x2c95, 0x2c95), I(0x2c97, 0x2c97), I(0x2c99, 0x2c99), I(0x2c9b, 0x2c9b), I(0x2c9d, 0x2c9d), I(0x2c9f, 0x2c9f), I(0x2ca1, 0x2ca1), I(0x2ca3, 0x2ca3), I(0x2ca5, 0x2ca5), I(0x2ca7, 0x2ca7), I(0x2ca9, 0x2ca9), I(0x2cab, 0x2cab), I(0x2cad, 0x2cad), I(0x2caf, 0x2caf), I(0x2cb1, 0x2cb1), I(0x2cb3, 0x2cb3), I(0x2cb5, 0x2cb5), I(0x2cb7, 0x2cb7), I(0x2cb9, 0x2cb9), I(0x2cbb, 0x2cbb), I(0x2cbd, 0x2cbd), I(0x2cbf, 0x2cbf), I(0x2cc1, 0x2cc1), I(0x2cc3, 0x2cc3), I(0x2cc5, 0x2cc5), I(0x2cc7, 0x2cc7), I(0x2cc9, 0x2cc9), I(0x2ccb, 0x2ccb), I(0x2ccd, 0x2ccd), I(0x2ccf, 0x2ccf), I(0x2cd1, 0x2cd1), I(0x2cd3, 0x2cd3), I(0x2cd5, 0x2cd5), I(0x2cd7, 0x2cd7), I(0x2cd9, 0x2cd9), I(0x2cdb, 0x2cdb), I(0x2cdd, 0x2cdd), I(0x2cdf, 0x2cdf), I(0x2ce1, 0x2ce1), I(0x2ce3, 0x2ce4), I(0x2cec, 0x2cec), I(0x2cee, 0x2cee), I(0x2d00, 0x2d25), I(0xa641, 0xa641), I(0xa643, 0xa643), I(0xa645, 0xa645), I(0xa647, 0xa647), I(0xa649, 0xa649), I(0xa64b, 0xa64b), I(0xa64d, 0xa64d), I(0xa64f, 0xa64f), I(0xa651, 0xa651), I(0xa653, 0xa653), I(0xa655, 0xa655), I(0xa657, 0xa657), I(0xa659, 0xa659), I(0xa65b, 0xa65b), I(0xa65d, 0xa65d), I(0xa65f, 0xa65f), I(0xa661, 0xa661), I(0xa663, 0xa663), I(0xa665, 0xa665), I(0xa667, 0xa667), I(0xa669, 0xa669), I(0xa66b, 0xa66b), I(0xa66d, 0xa66d), I(0xa681, 0xa681), I(0xa683, 0xa683), I(0xa685, 0xa685), I(0xa687, 0xa687), I(0xa689, 0xa689), I(0xa68b, 0xa68b), I(0xa68d, 0xa68d), I(0xa68f, 0xa68f), I(0xa691, 0xa691), I(0xa693, 0xa693), I(0xa695, 0xa695), I(0xa697, 0xa697), I(0xa723, 0xa723), I(0xa725, 0xa725), I(0xa727, 0xa727), I(0xa729, 0xa729), I(0xa72b, 0xa72b), I(0xa72d, 0xa72d), I(0xa72f, 0xa731), I(0xa733, 0xa733), I(0xa735, 0xa735), I(0xa737, 0xa737), I(0xa739, 0xa739), I(0xa73b, 0xa73b), I(0xa73d, 0xa73d), I(0xa73f, 0xa73f), I(0xa741, 0xa741), I(0xa743, 0xa743), I(0xa745, 0xa745), I(0xa747, 0xa747), I(0xa749, 0xa749), I(0xa74b, 0xa74b), I(0xa74d, 0xa74d), I(0xa74f, 0xa74f), I(0xa751, 0xa751), I(0xa753, 0xa753), I(0xa755, 0xa755), I(0xa757, 0xa757), I(0xa759, 0xa759), I(0xa75b, 0xa75b), I(0xa75d, 0xa75d), I(0xa75f, 0xa75f), I(0xa761, 0xa761), I(0xa763, 0xa763), I(0xa765, 0xa765), I(0xa767, 0xa767), I(0xa769, 0xa769), I(0xa76b, 0xa76b), I(0xa76d, 0xa76d), I(0xa76f, 0xa76f), I(0xa771, 0xa778), I(0xa77a, 0xa77a), I(0xa77c, 0xa77c), I(0xa77f, 0xa77f), I(0xa781, 0xa781), I(0xa783, 0xa783), I(0xa785, 0xa785), I(0xa787, 0xa787), I(0xa78c, 0xa78c), I(0xa78e, 0xa78e), I(0xa791, 0xa791), I(0xa7a1, 0xa7a1), I(0xa7a3, 0xa7a3), I(0xa7a5, 0xa7a5), I(0xa7a7, 0xa7a7), I(0xa7a9, 0xa7a9), I(0xa7fa, 0xa7fa), I(0xfb00, 0xfb06), I(0xfb13, 0xfb17), I(0xff41, 0xff5a), I(0x10428, 0x1044f), I(0x1d41a, 0x1d433), I(0x1d44e, 0x1d454), I(0x1d456, 0x1d467), I(0x1d482, 0x1d49b), I(0x1d4b6, 0x1d4b9), I(0x1d4bb, 0x1d4bb), I(0x1d4bd, 0x1d4c3), I(0x1d4c5, 0x1d4cf), I(0x1d4ea, 0x1d503), I(0x1d51e, 0x1d537), I(0x1d552, 0x1d56b), I(0x1d586, 0x1d59f), I(0x1d5ba, 0x1d5d3), I(0x1d5ee, 0x1d607), I(0x1d622, 0x1d63b), I(0x1d656, 0x1d66f), I(0x1d68a, 0x1d6a5), I(0x1d6c2, 0x1d6da), I(0x1d6dc, 0x1d6e1), I(0x1d6fc, 0x1d714), I(0x1d716, 0x1d71b), I(0x1d736, 0x1d74e), I(0x1d750, 0x1d755), I(0x1d770, 0x1d788), I(0x1d78a, 0x1d78f), I(0x1d7aa, 0x1d7c2), I(0x1d7c4, 0x1d7c9), I(0x1d7cb, 0x1d7cb)));
    addProperty("Lm", Arrays.asList(I(0x2b0, 0x2c1), I(0x2c6, 0x2d1), I(0x2e0, 0x2e4), I(0x2ec, 0x2ec), I(0x2ee, 0x2ee), I(0x374, 0x374), I(0x37a, 0x37a), I(0x559, 0x559), I(0x640, 0x640), I(0x6e5, 0x6e6), I(0x7f4, 0x7f5), I(0x7fa, 0x7fa), I(0x81a, 0x81a), I(0x824, 0x824), I(0x828, 0x828), I(0x971, 0x971), I(0xe46, 0xe46), I(0xec6, 0xec6), I(0x10fc, 0x10fc), I(0x17d7, 0x17d7), I(0x1843, 0x1843), I(0x1aa7, 0x1aa7), I(0x1c78, 0x1c7d), I(0x1d2c, 0x1d61), I(0x1d78, 0x1d78), I(0x1d9b, 0x1dbf), I(0x2071, 0x2071), I(0x207f, 0x207f), I(0x2090, 0x209c), I(0x2c7d, 0x2c7d), I(0x2d6f, 0x2d6f), I(0x2e2f, 0x2e2f), I(0x3005, 0x3005), I(0x3031, 0x3035), I(0x303b, 0x303b), I(0x309d, 0x309e), I(0x30fc, 0x30fe), I(0xa015, 0xa015), I(0xa4f8, 0xa4fd), I(0xa60c, 0xa60c), I(0xa67f, 0xa67f), I(0xa717, 0xa71f), I(0xa770, 0xa770), I(0xa788, 0xa788), I(0xa9cf, 0xa9cf), I(0xaa70, 0xaa70), I(0xaadd, 0xaadd), I(0xff70, 0xff70), I(0xff9e, 0xff9f)));
    addProperty("Lo", Arrays.asList(I(0x1bb, 0x1bb), I(0x1c0, 0x1c3), I(0x294, 0x294), I(0x5d0, 0x5ea), I(0x5f0, 0x5f2), I(0x620, 0x63f), I(0x641, 0x64a), I(0x66e, 0x66f), I(0x671, 0x6d3), I(0x6d5, 0x6d5), I(0x6ee, 0x6ef), I(0x6fa, 0x6fc), I(0x6ff, 0x6ff), I(0x710, 0x710), I(0x712, 0x72f), I(0x74d, 0x7a5), I(0x7b1, 0x7b1), I(0x7ca, 0x7ea), I(0x800, 0x815), I(0x840, 0x858), I(0x904, 0x939), I(0x93d, 0x93d), I(0x950, 0x950), I(0x958, 0x961), I(0x972, 0x977), I(0x979, 0x97f), I(0x985, 0x98c), I(0x98f, 0x990), I(0x993, 0x9a8), I(0x9aa, 0x9b0), I(0x9b2, 0x9b2), I(0x9b6, 0x9b9), I(0x9bd, 0x9bd), I(0x9ce, 0x9ce), I(0x9dc, 0x9dd), I(0x9df, 0x9e1), I(0x9f0, 0x9f1), I(0xa05, 0xa0a), I(0xa0f, 0xa10), I(0xa13, 0xa28), I(0xa2a, 0xa30), I(0xa32, 0xa33), I(0xa35, 0xa36), I(0xa38, 0xa39), I(0xa59, 0xa5c), I(0xa5e, 0xa5e), I(0xa72, 0xa74), I(0xa85, 0xa8d), I(0xa8f, 0xa91), I(0xa93, 0xaa8), I(0xaaa, 0xab0), I(0xab2, 0xab3), I(0xab5, 0xab9), I(0xabd, 0xabd), I(0xad0, 0xad0), I(0xae0, 0xae1), I(0xb05, 0xb0c), I(0xb0f, 0xb10), I(0xb13, 0xb28), I(0xb2a, 0xb30), I(0xb32, 0xb33), I(0xb35, 0xb39), I(0xb3d, 0xb3d), I(0xb5c, 0xb5d), I(0xb5f, 0xb61), I(0xb71, 0xb71), I(0xb83, 0xb83), I(0xb85, 0xb8a), I(0xb8e, 0xb90), I(0xb92, 0xb95), I(0xb99, 0xb9a), I(0xb9c, 0xb9c), I(0xb9e, 0xb9f), I(0xba3, 0xba4), I(0xba8, 0xbaa), I(0xbae, 0xbb9), I(0xbd0, 0xbd0), I(0xc05, 0xc0c), I(0xc0e, 0xc10), I(0xc12, 0xc28), I(0xc2a, 0xc33), I(0xc35, 0xc39), I(0xc3d, 0xc3d), I(0xc58, 0xc59), I(0xc60, 0xc61), I(0xc85, 0xc8c), I(0xc8e, 0xc90), I(0xc92, 0xca8), I(0xcaa, 0xcb3), I(0xcb5, 0xcb9), I(0xcbd, 0xcbd), I(0xcde, 0xcde), I(0xce0, 0xce1), I(0xcf1, 0xcf2), I(0xd05, 0xd0c), I(0xd0e, 0xd10), I(0xd12, 0xd3a), I(0xd3d, 0xd3d), I(0xd4e, 0xd4e), I(0xd60, 0xd61), I(0xd7a, 0xd7f), I(0xd85, 0xd96), I(0xd9a, 0xdb1), I(0xdb3, 0xdbb), I(0xdbd, 0xdbd), I(0xdc0, 0xdc6), I(0xe01, 0xe30), I(0xe32, 0xe33), I(0xe40, 0xe45), I(0xe81, 0xe82), I(0xe84, 0xe84), I(0xe87, 0xe88), I(0xe8a, 0xe8a), I(0xe8d, 0xe8d), I(0xe94, 0xe97), I(0xe99, 0xe9f), I(0xea1, 0xea3), I(0xea5, 0xea5), I(0xea7, 0xea7), I(0xeaa, 0xeab), I(0xead, 0xeb0), I(0xeb2, 0xeb3), I(0xebd, 0xebd), I(0xec0, 0xec4), I(0xedc, 0xedd), I(0xf00, 0xf00), I(0xf40, 0xf47), I(0xf49, 0xf6c), I(0xf88, 0xf8c), I(0x1000, 0x102a), I(0x103f, 0x103f), I(0x1050, 0x1055), I(0x105a, 0x105d), I(0x1061, 0x1061), I(0x1065, 0x1066), I(0x106e, 0x1070), I(0x1075, 0x1081), I(0x108e, 0x108e), I(0x10d0, 0x10fa), I(0x1100, 0x1248), I(0x124a, 0x124d), I(0x1250, 0x1256), I(0x1258, 0x1258), I(0x125a, 0x125d), I(0x1260, 0x1288), I(0x128a, 0x128d), I(0x1290, 0x12b0), I(0x12b2, 0x12b5), I(0x12b8, 0x12be), I(0x12c0, 0x12c0), I(0x12c2, 0x12c5), I(0x12c8, 0x12d6), I(0x12d8, 0x1310), I(0x1312, 0x1315), I(0x1318, 0x135a), I(0x1380, 0x138f), I(0x13a0, 0x13f4), I(0x1401, 0x166c), I(0x166f, 0x167f), I(0x1681, 0x169a), I(0x16a0, 0x16ea), I(0x1700, 0x170c), I(0x170e, 0x1711), I(0x1720, 0x1731), I(0x1740, 0x1751), I(0x1760, 0x176c), I(0x176e, 0x1770), I(0x1780, 0x17b3), I(0x17dc, 0x17dc), I(0x1820, 0x1842), I(0x1844, 0x1877), I(0x1880, 0x18a8), I(0x18aa, 0x18aa), I(0x18b0, 0x18f5), I(0x1900, 0x191c), I(0x1950, 0x196d), I(0x1970, 0x1974), I(0x1980, 0x19ab), I(0x19c1, 0x19c7), I(0x1a00, 0x1a16), I(0x1a20, 0x1a54), I(0x1b05, 0x1b33), I(0x1b45, 0x1b4b), I(0x1b83, 0x1ba0), I(0x1bae, 0x1baf), I(0x1bc0, 0x1be5), I(0x1c00, 0x1c23), I(0x1c4d, 0x1c4f), I(0x1c5a, 0x1c77), I(0x1ce9, 0x1cec), I(0x1cee, 0x1cf1), I(0x2135, 0x2138), I(0x2d30, 0x2d65), I(0x2d80, 0x2d96), I(0x2da0, 0x2da6), I(0x2da8, 0x2dae), I(0x2db0, 0x2db6), I(0x2db8, 0x2dbe), I(0x2dc0, 0x2dc6), I(0x2dc8, 0x2dce), I(0x2dd0, 0x2dd6), I(0x2dd8, 0x2dde), I(0x3006, 0x3006), I(0x303c, 0x303c), I(0x3041, 0x3096), I(0x309f, 0x309f), I(0x30a1, 0x30fa), I(0x30ff, 0x30ff), I(0x3105, 0x312d), I(0x3131, 0x318e), I(0x31a0, 0x31ba), I(0x31f0, 0x31ff), I(0x3400, 0x4db5), I(0x4e00, 0x9fcb), I(0xa000, 0xa014), I(0xa016, 0xa48c), I(0xa4d0, 0xa4f7), I(0xa500, 0xa60b), I(0xa610, 0xa61f), I(0xa62a, 0xa62b), I(0xa66e, 0xa66e), I(0xa6a0, 0xa6e5), I(0xa7fb, 0xa801), I(0xa803, 0xa805), I(0xa807, 0xa80a), I(0xa80c, 0xa822), I(0xa840, 0xa873), I(0xa882, 0xa8b3), I(0xa8f2, 0xa8f7), I(0xa8fb, 0xa8fb), I(0xa90a, 0xa925), I(0xa930, 0xa946), I(0xa960, 0xa97c), I(0xa984, 0xa9b2), I(0xaa00, 0xaa28), I(0xaa40, 0xaa42), I(0xaa44, 0xaa4b), I(0xaa60, 0xaa6f), I(0xaa71, 0xaa76), I(0xaa7a, 0xaa7a), I(0xaa80, 0xaaaf), I(0xaab1, 0xaab1), I(0xaab5, 0xaab6), I(0xaab9, 0xaabd), I(0xaac0, 0xaac0), I(0xaac2, 0xaac2), I(0xaadb, 0xaadc), I(0xab01, 0xab06), I(0xab09, 0xab0e), I(0xab11, 0xab16), I(0xab20, 0xab26), I(0xab28, 0xab2e), I(0xabc0, 0xabe2), I(0xac00, 0xd7a3), I(0xd7b0, 0xd7c6), I(0xd7cb, 0xd7fb), I(0xf900, 0xfa2d), I(0xfa30, 0xfa6d), I(0xfa70, 0xfad9), I(0xfb1d, 0xfb1d), I(0xfb1f, 0xfb28), I(0xfb2a, 0xfb36), I(0xfb38, 0xfb3c), I(0xfb3e, 0xfb3e), I(0xfb40, 0xfb41), I(0xfb43, 0xfb44), I(0xfb46, 0xfbb1), I(0xfbd3, 0xfd3d), I(0xfd50, 0xfd8f), I(0xfd92, 0xfdc7), I(0xfdf0, 0xfdfb), I(0xfe70, 0xfe74), I(0xfe76, 0xfefc), I(0xff66, 0xff6f), I(0xff71, 0xff9d), I(0xffa0, 0xffbe), I(0xffc2, 0xffc7), I(0xffca, 0xffcf), I(0xffd2, 0xffd7), I(0xffda, 0xffdc), I(0x10000, 0x1000b), I(0x1000d, 0x10026), I(0x10028, 0x1003a), I(0x1003c, 0x1003d), I(0x1003f, 0x1004d), I(0x10050, 0x1005d), I(0x10080, 0x100fa), I(0x10280, 0x1029c), I(0x102a0, 0x102d0), I(0x10300, 0x1031e), I(0x10330, 0x10340), I(0x10342, 0x10349), I(0x10380, 0x1039d), I(0x103a0, 0x103c3), I(0x103c8, 0x103cf), I(0x10450, 0x1049d), I(0x10800, 0x10805), I(0x10808, 0x10808), I(0x1080a, 0x10835), I(0x10837, 0x10838), I(0x1083c, 0x1083c), I(0x1083f, 0x10855), I(0x10900, 0x10915), I(0x10920, 0x10939), I(0x10a00, 0x10a00), I(0x10a10, 0x10a13), I(0x10a15, 0x10a17), I(0x10a19, 0x10a33), I(0x10a60, 0x10a7c), I(0x10b00, 0x10b35), I(0x10b40, 0x10b55), I(0x10b60, 0x10b72), I(0x10c00, 0x10c48), I(0x11003, 0x11037), I(0x11083, 0x110af), I(0x12000, 0x1236e), I(0x13000, 0x1342e), I(0x16800, 0x16a38), I(0x1b000, 0x1b001), I(0x20000, 0x2a6d6), I(0x2a700, 0x2b734), I(0x2b740, 0x2b81d), I(0x2f800, 0x2fa1d)));
    addProperty("Lt", Arrays.asList(I(0x1c5, 0x1c5), I(0x1c8, 0x1c8), I(0x1cb, 0x1cb), I(0x1f2, 0x1f2), I(0x1f88, 0x1f8f), I(0x1f98, 0x1f9f), I(0x1fa8, 0x1faf), I(0x1fbc, 0x1fbc), I(0x1fcc, 0x1fcc), I(0x1ffc, 0x1ffc)));
    addProperty("Lu", Arrays.asList(I(0x41, 0x5a), I(0xc0, 0xd6), I(0xd8, 0xde), I(0x100, 0x100), I(0x102, 0x102), I(0x104, 0x104), I(0x106, 0x106), I(0x108, 0x108), I(0x10a, 0x10a), I(0x10c, 0x10c), I(0x10e, 0x10e), I(0x110, 0x110), I(0x112, 0x112), I(0x114, 0x114), I(0x116, 0x116), I(0x118, 0x118), I(0x11a, 0x11a), I(0x11c, 0x11c), I(0x11e, 0x11e), I(0x120, 0x120), I(0x122, 0x122), I(0x124, 0x124), I(0x126, 0x126), I(0x128, 0x128), I(0x12a, 0x12a), I(0x12c, 0x12c), I(0x12e, 0x12e), I(0x130, 0x130), I(0x132, 0x132), I(0x134, 0x134), I(0x136, 0x136), I(0x139, 0x139), I(0x13b, 0x13b), I(0x13d, 0x13d), I(0x13f, 0x13f), I(0x141, 0x141), I(0x143, 0x143), I(0x145, 0x145), I(0x147, 0x147), I(0x14a, 0x14a), I(0x14c, 0x14c), I(0x14e, 0x14e), I(0x150, 0x150), I(0x152, 0x152), I(0x154, 0x154), I(0x156, 0x156), I(0x158, 0x158), I(0x15a, 0x15a), I(0x15c, 0x15c), I(0x15e, 0x15e), I(0x160, 0x160), I(0x162, 0x162), I(0x164, 0x164), I(0x166, 0x166), I(0x168, 0x168), I(0x16a, 0x16a), I(0x16c, 0x16c), I(0x16e, 0x16e), I(0x170, 0x170), I(0x172, 0x172), I(0x174, 0x174), I(0x176, 0x176), I(0x178, 0x179), I(0x17b, 0x17b), I(0x17d, 0x17d), I(0x181, 0x182), I(0x184, 0x184), I(0x186, 0x187), I(0x189, 0x18b), I(0x18e, 0x191), I(0x193, 0x194), I(0x196, 0x198), I(0x19c, 0x19d), I(0x19f, 0x1a0), I(0x1a2, 0x1a2), I(0x1a4, 0x1a4), I(0x1a6, 0x1a7), I(0x1a9, 0x1a9), I(0x1ac, 0x1ac), I(0x1ae, 0x1af), I(0x1b1, 0x1b3), I(0x1b5, 0x1b5), I(0x1b7, 0x1b8), I(0x1bc, 0x1bc), I(0x1c4, 0x1c4), I(0x1c7, 0x1c7), I(0x1ca, 0x1ca), I(0x1cd, 0x1cd), I(0x1cf, 0x1cf), I(0x1d1, 0x1d1), I(0x1d3, 0x1d3), I(0x1d5, 0x1d5), I(0x1d7, 0x1d7), I(0x1d9, 0x1d9), I(0x1db, 0x1db), I(0x1de, 0x1de), I(0x1e0, 0x1e0), I(0x1e2, 0x1e2), I(0x1e4, 0x1e4), I(0x1e6, 0x1e6), I(0x1e8, 0x1e8), I(0x1ea, 0x1ea), I(0x1ec, 0x1ec), I(0x1ee, 0x1ee), I(0x1f1, 0x1f1), I(0x1f4, 0x1f4), I(0x1f6, 0x1f8), I(0x1fa, 0x1fa), I(0x1fc, 0x1fc), I(0x1fe, 0x1fe), I(0x200, 0x200), I(0x202, 0x202), I(0x204, 0x204), I(0x206, 0x206), I(0x208, 0x208), I(0x20a, 0x20a), I(0x20c, 0x20c), I(0x20e, 0x20e), I(0x210, 0x210), I(0x212, 0x212), I(0x214, 0x214), I(0x216, 0x216), I(0x218, 0x218), I(0x21a, 0x21a), I(0x21c, 0x21c), I(0x21e, 0x21e), I(0x220, 0x220), I(0x222, 0x222), I(0x224, 0x224), I(0x226, 0x226), I(0x228, 0x228), I(0x22a, 0x22a), I(0x22c, 0x22c), I(0x22e, 0x22e), I(0x230, 0x230), I(0x232, 0x232), I(0x23a, 0x23b), I(0x23d, 0x23e), I(0x241, 0x241), I(0x243, 0x246), I(0x248, 0x248), I(0x24a, 0x24a), I(0x24c, 0x24c), I(0x24e, 0x24e), I(0x370, 0x370), I(0x372, 0x372), I(0x376, 0x376), I(0x386, 0x386), I(0x388, 0x38a), I(0x38c, 0x38c), I(0x38e, 0x38f), I(0x391, 0x3a1), I(0x3a3, 0x3ab), I(0x3cf, 0x3cf), I(0x3d2, 0x3d4), I(0x3d8, 0x3d8), I(0x3da, 0x3da), I(0x3dc, 0x3dc), I(0x3de, 0x3de), I(0x3e0, 0x3e0), I(0x3e2, 0x3e2), I(0x3e4, 0x3e4), I(0x3e6, 0x3e6), I(0x3e8, 0x3e8), I(0x3ea, 0x3ea), I(0x3ec, 0x3ec), I(0x3ee, 0x3ee), I(0x3f4, 0x3f4), I(0x3f7, 0x3f7), I(0x3f9, 0x3fa), I(0x3fd, 0x42f), I(0x460, 0x460), I(0x462, 0x462), I(0x464, 0x464), I(0x466, 0x466), I(0x468, 0x468), I(0x46a, 0x46a), I(0x46c, 0x46c), I(0x46e, 0x46e), I(0x470, 0x470), I(0x472, 0x472), I(0x474, 0x474), I(0x476, 0x476), I(0x478, 0x478), I(0x47a, 0x47a), I(0x47c, 0x47c), I(0x47e, 0x47e), I(0x480, 0x480), I(0x48a, 0x48a), I(0x48c, 0x48c), I(0x48e, 0x48e), I(0x490, 0x490), I(0x492, 0x492), I(0x494, 0x494), I(0x496, 0x496), I(0x498, 0x498), I(0x49a, 0x49a), I(0x49c, 0x49c), I(0x49e, 0x49e), I(0x4a0, 0x4a0), I(0x4a2, 0x4a2), I(0x4a4, 0x4a4), I(0x4a6, 0x4a6), I(0x4a8, 0x4a8), I(0x4aa, 0x4aa), I(0x4ac, 0x4ac), I(0x4ae, 0x4ae), I(0x4b0, 0x4b0), I(0x4b2, 0x4b2), I(0x4b4, 0x4b4), I(0x4b6, 0x4b6), I(0x4b8, 0x4b8), I(0x4ba, 0x4ba), I(0x4bc, 0x4bc), I(0x4be, 0x4be), I(0x4c0, 0x4c1), I(0x4c3, 0x4c3), I(0x4c5, 0x4c5), I(0x4c7, 0x4c7), I(0x4c9, 0x4c9), I(0x4cb, 0x4cb), I(0x4cd, 0x4cd), I(0x4d0, 0x4d0), I(0x4d2, 0x4d2), I(0x4d4, 0x4d4), I(0x4d6, 0x4d6), I(0x4d8, 0x4d8), I(0x4da, 0x4da), I(0x4dc, 0x4dc), I(0x4de, 0x4de), I(0x4e0, 0x4e0), I(0x4e2, 0x4e2), I(0x4e4, 0x4e4), I(0x4e6, 0x4e6), I(0x4e8, 0x4e8), I(0x4ea, 0x4ea), I(0x4ec, 0x4ec), I(0x4ee, 0x4ee), I(0x4f0, 0x4f0), I(0x4f2, 0x4f2), I(0x4f4, 0x4f4), I(0x4f6, 0x4f6), I(0x4f8, 0x4f8), I(0x4fa, 0x4fa), I(0x4fc, 0x4fc), I(0x4fe, 0x4fe), I(0x500, 0x500), I(0x502, 0x502), I(0x504, 0x504), I(0x506, 0x506), I(0x508, 0x508), I(0x50a, 0x50a), I(0x50c, 0x50c), I(0x50e, 0x50e), I(0x510, 0x510), I(0x512, 0x512), I(0x514, 0x514), I(0x516, 0x516), I(0x518, 0x518), I(0x51a, 0x51a), I(0x51c, 0x51c), I(0x51e, 0x51e), I(0x520, 0x520), I(0x522, 0x522), I(0x524, 0x524), I(0x526, 0x526), I(0x531, 0x556), I(0x10a0, 0x10c5), I(0x1e00, 0x1e00), I(0x1e02, 0x1e02), I(0x1e04, 0x1e04), I(0x1e06, 0x1e06), I(0x1e08, 0x1e08), I(0x1e0a, 0x1e0a), I(0x1e0c, 0x1e0c), I(0x1e0e, 0x1e0e), I(0x1e10, 0x1e10), I(0x1e12, 0x1e12), I(0x1e14, 0x1e14), I(0x1e16, 0x1e16), I(0x1e18, 0x1e18), I(0x1e1a, 0x1e1a), I(0x1e1c, 0x1e1c), I(0x1e1e, 0x1e1e), I(0x1e20, 0x1e20), I(0x1e22, 0x1e22), I(0x1e24, 0x1e24), I(0x1e26, 0x1e26), I(0x1e28, 0x1e28), I(0x1e2a, 0x1e2a), I(0x1e2c, 0x1e2c), I(0x1e2e, 0x1e2e), I(0x1e30, 0x1e30), I(0x1e32, 0x1e32), I(0x1e34, 0x1e34), I(0x1e36, 0x1e36), I(0x1e38, 0x1e38), I(0x1e3a, 0x1e3a), I(0x1e3c, 0x1e3c), I(0x1e3e, 0x1e3e), I(0x1e40, 0x1e40), I(0x1e42, 0x1e42), I(0x1e44, 0x1e44), I(0x1e46, 0x1e46), I(0x1e48, 0x1e48), I(0x1e4a, 0x1e4a), I(0x1e4c, 0x1e4c), I(0x1e4e, 0x1e4e), I(0x1e50, 0x1e50), I(0x1e52, 0x1e52), I(0x1e54, 0x1e54), I(0x1e56, 0x1e56), I(0x1e58, 0x1e58), I(0x1e5a, 0x1e5a), I(0x1e5c, 0x1e5c), I(0x1e5e, 0x1e5e), I(0x1e60, 0x1e60), I(0x1e62, 0x1e62), I(0x1e64, 0x1e64), I(0x1e66, 0x1e66), I(0x1e68, 0x1e68), I(0x1e6a, 0x1e6a), I(0x1e6c, 0x1e6c), I(0x1e6e, 0x1e6e), I(0x1e70, 0x1e70), I(0x1e72, 0x1e72), I(0x1e74, 0x1e74), I(0x1e76, 0x1e76), I(0x1e78, 0x1e78), I(0x1e7a, 0x1e7a), I(0x1e7c, 0x1e7c), I(0x1e7e, 0x1e7e), I(0x1e80, 0x1e80), I(0x1e82, 0x1e82), I(0x1e84, 0x1e84), I(0x1e86, 0x1e86), I(0x1e88, 0x1e88), I(0x1e8a, 0x1e8a), I(0x1e8c, 0x1e8c), I(0x1e8e, 0x1e8e), I(0x1e90, 0x1e90), I(0x1e92, 0x1e92), I(0x1e94, 0x1e94), I(0x1e9e, 0x1e9e), I(0x1ea0, 0x1ea0), I(0x1ea2, 0x1ea2), I(0x1ea4, 0x1ea4), I(0x1ea6, 0x1ea6), I(0x1ea8, 0x1ea8), I(0x1eaa, 0x1eaa), I(0x1eac, 0x1eac), I(0x1eae, 0x1eae), I(0x1eb0, 0x1eb0), I(0x1eb2, 0x1eb2), I(0x1eb4, 0x1eb4), I(0x1eb6, 0x1eb6), I(0x1eb8, 0x1eb8), I(0x1eba, 0x1eba), I(0x1ebc, 0x1ebc), I(0x1ebe, 0x1ebe), I(0x1ec0, 0x1ec0), I(0x1ec2, 0x1ec2), I(0x1ec4, 0x1ec4), I(0x1ec6, 0x1ec6), I(0x1ec8, 0x1ec8), I(0x1eca, 0x1eca), I(0x1ecc, 0x1ecc), I(0x1ece, 0x1ece), I(0x1ed0, 0x1ed0), I(0x1ed2, 0x1ed2), I(0x1ed4, 0x1ed4), I(0x1ed6, 0x1ed6), I(0x1ed8, 0x1ed8), I(0x1eda, 0x1eda), I(0x1edc, 0x1edc), I(0x1ede, 0x1ede), I(0x1ee0, 0x1ee0), I(0x1ee2, 0x1ee2), I(0x1ee4, 0x1ee4), I(0x1ee6, 0x1ee6), I(0x1ee8, 0x1ee8), I(0x1eea, 0x1eea), I(0x1eec, 0x1eec), I(0x1eee, 0x1eee), I(0x1ef0, 0x1ef0), I(0x1ef2, 0x1ef2), I(0x1ef4, 0x1ef4), I(0x1ef6, 0x1ef6), I(0x1ef8, 0x1ef8), I(0x1efa, 0x1efa), I(0x1efc, 0x1efc), I(0x1efe, 0x1efe), I(0x1f08, 0x1f0f), I(0x1f18, 0x1f1d), I(0x1f28, 0x1f2f), I(0x1f38, 0x1f3f), I(0x1f48, 0x1f4d), I(0x1f59, 0x1f59), I(0x1f5b, 0x1f5b), I(0x1f5d, 0x1f5d), I(0x1f5f, 0x1f5f), I(0x1f68, 0x1f6f), I(0x1fb8, 0x1fbb), I(0x1fc8, 0x1fcb), I(0x1fd8, 0x1fdb), I(0x1fe8, 0x1fec), I(0x1ff8, 0x1ffb), I(0x2102, 0x2102), I(0x2107, 0x2107), I(0x210b, 0x210d), I(0x2110, 0x2112), I(0x2115, 0x2115), I(0x2119, 0x211d), I(0x2124, 0x2124), I(0x2126, 0x2126), I(0x2128, 0x2128), I(0x212a, 0x212d), I(0x2130, 0x2133), I(0x213e, 0x213f), I(0x2145, 0x2145), I(0x2183, 0x2183), I(0x2c00, 0x2c2e), I(0x2c60, 0x2c60), I(0x2c62, 0x2c64), I(0x2c67, 0x2c67), I(0x2c69, 0x2c69), I(0x2c6b, 0x2c6b), I(0x2c6d, 0x2c70), I(0x2c72, 0x2c72), I(0x2c75, 0x2c75), I(0x2c7e, 0x2c80), I(0x2c82, 0x2c82), I(0x2c84, 0x2c84), I(0x2c86, 0x2c86), I(0x2c88, 0x2c88), I(0x2c8a, 0x2c8a), I(0x2c8c, 0x2c8c), I(0x2c8e, 0x2c8e), I(0x2c90, 0x2c90), I(0x2c92, 0x2c92), I(0x2c94, 0x2c94), I(0x2c96, 0x2c96), I(0x2c98, 0x2c98), I(0x2c9a, 0x2c9a), I(0x2c9c, 0x2c9c), I(0x2c9e, 0x2c9e), I(0x2ca0, 0x2ca0), I(0x2ca2, 0x2ca2), I(0x2ca4, 0x2ca4), I(0x2ca6, 0x2ca6), I(0x2ca8, 0x2ca8), I(0x2caa, 0x2caa), I(0x2cac, 0x2cac), I(0x2cae, 0x2cae), I(0x2cb0, 0x2cb0), I(0x2cb2, 0x2cb2), I(0x2cb4, 0x2cb4), I(0x2cb6, 0x2cb6), I(0x2cb8, 0x2cb8), I(0x2cba, 0x2cba), I(0x2cbc, 0x2cbc), I(0x2cbe, 0x2cbe), I(0x2cc0, 0x2cc0), I(0x2cc2, 0x2cc2), I(0x2cc4, 0x2cc4), I(0x2cc6, 0x2cc6), I(0x2cc8, 0x2cc8), I(0x2cca, 0x2cca), I(0x2ccc, 0x2ccc), I(0x2cce, 0x2cce), I(0x2cd0, 0x2cd0), I(0x2cd2, 0x2cd2), I(0x2cd4, 0x2cd4), I(0x2cd6, 0x2cd6), I(0x2cd8, 0x2cd8), I(0x2cda, 0x2cda), I(0x2cdc, 0x2cdc), I(0x2cde, 0x2cde), I(0x2ce0, 0x2ce0), I(0x2ce2, 0x2ce2), I(0x2ceb, 0x2ceb), I(0x2ced, 0x2ced), I(0xa640, 0xa640), I(0xa642, 0xa642), I(0xa644, 0xa644), I(0xa646, 0xa646), I(0xa648, 0xa648), I(0xa64a, 0xa64a), I(0xa64c, 0xa64c), I(0xa64e, 0xa64e), I(0xa650, 0xa650), I(0xa652, 0xa652), I(0xa654, 0xa654), I(0xa656, 0xa656), I(0xa658, 0xa658), I(0xa65a, 0xa65a), I(0xa65c, 0xa65c), I(0xa65e, 0xa65e), I(0xa660, 0xa660), I(0xa662, 0xa662), I(0xa664, 0xa664), I(0xa666, 0xa666), I(0xa668, 0xa668), I(0xa66a, 0xa66a), I(0xa66c, 0xa66c), I(0xa680, 0xa680), I(0xa682, 0xa682), I(0xa684, 0xa684), I(0xa686, 0xa686), I(0xa688, 0xa688), I(0xa68a, 0xa68a), I(0xa68c, 0xa68c), I(0xa68e, 0xa68e), I(0xa690, 0xa690), I(0xa692, 0xa692), I(0xa694, 0xa694), I(0xa696, 0xa696), I(0xa722, 0xa722), I(0xa724, 0xa724), I(0xa726, 0xa726), I(0xa728, 0xa728), I(0xa72a, 0xa72a), I(0xa72c, 0xa72c), I(0xa72e, 0xa72e), I(0xa732, 0xa732), I(0xa734, 0xa734), I(0xa736, 0xa736), I(0xa738, 0xa738), I(0xa73a, 0xa73a), I(0xa73c, 0xa73c), I(0xa73e, 0xa73e), I(0xa740, 0xa740), I(0xa742, 0xa742), I(0xa744, 0xa744), I(0xa746, 0xa746), I(0xa748, 0xa748), I(0xa74a, 0xa74a), I(0xa74c, 0xa74c), I(0xa74e, 0xa74e), I(0xa750, 0xa750), I(0xa752, 0xa752), I(0xa754, 0xa754), I(0xa756, 0xa756), I(0xa758, 0xa758), I(0xa75a, 0xa75a), I(0xa75c, 0xa75c), I(0xa75e, 0xa75e), I(0xa760, 0xa760), I(0xa762, 0xa762), I(0xa764, 0xa764), I(0xa766, 0xa766), I(0xa768, 0xa768), I(0xa76a, 0xa76a), I(0xa76c, 0xa76c), I(0xa76e, 0xa76e), I(0xa779, 0xa779), I(0xa77b, 0xa77b), I(0xa77d, 0xa77e), I(0xa780, 0xa780), I(0xa782, 0xa782), I(0xa784, 0xa784), I(0xa786, 0xa786), I(0xa78b, 0xa78b), I(0xa78d, 0xa78d), I(0xa790, 0xa790), I(0xa7a0, 0xa7a0), I(0xa7a2, 0xa7a2), I(0xa7a4, 0xa7a4), I(0xa7a6, 0xa7a6), I(0xa7a8, 0xa7a8), I(0xff21, 0xff3a), I(0x10400, 0x10427), I(0x1d400, 0x1d419), I(0x1d434, 0x1d44d), I(0x1d468, 0x1d481), I(0x1d49c, 0x1d49c), I(0x1d49e, 0x1d49f), I(0x1d4a2, 0x1d4a2), I(0x1d4a5, 0x1d4a6), I(0x1d4a9, 0x1d4ac), I(0x1d4ae, 0x1d4b5), I(0x1d4d0, 0x1d4e9), I(0x1d504, 0x1d505), I(0x1d507, 0x1d50a), I(0x1d50d, 0x1d514), I(0x1d516, 0x1d51c), I(0x1d538, 0x1d539), I(0x1d53b, 0x1d53e), I(0x1d540, 0x1d544), I(0x1d546, 0x1d546), I(0x1d54a, 0x1d550), I(0x1d56c, 0x1d585), I(0x1d5a0, 0x1d5b9), I(0x1d5d4, 0x1d5ed), I(0x1d608, 0x1d621), I(0x1d63c, 0x1d655), I(0x1d670, 0x1d689), I(0x1d6a8, 0x1d6c0), I(0x1d6e2, 0x1d6fa), I(0x1d71c, 0x1d734), I(0x1d756, 0x1d76e), I(0x1d790, 0x1d7a8), I(0x1d7ca, 0x1d7ca)));
  }


  // generated by generate_unicode_properties_aliases.py
  private static void initPropertiesAliases() {
    addPropertyAlias("C", Arrays.asList("Cc", "Cf", "Cn", "Co", "Cs"));
    addPropertyAlias("L", Arrays.asList("Ll", "Lm", "Lo", "Lt", "Lu"));
    addPropertyAlias("M", Arrays.asList("Mc", "Me", "Mn"));
    addPropertyAlias("N", Arrays.asList("Nd", "Nl", "No"));
    addPropertyAlias("P", Arrays.asList("Pc", "Pd", "Pe", "Pf", "Pi", "Po", "Ps"));
    addPropertyAlias("S", Arrays.asList("Sc", "Sk", "Sm", "So"));
    addPropertyAlias("Z", Arrays.asList("Zl", "Zp", "Zs"));
    addPropertyAlias("Cased_Letter", Arrays.asList("Ll", "Lt", "Lu"));
    addPropertyAlias("Close_Punctuation", Arrays.asList("Pe"));
    addPropertyAlias("Connector_Punctuation", Arrays.asList("Pc"));
    addPropertyAlias("Control", Arrays.asList("Cc"));
    addPropertyAlias("Currency_Symbol", Arrays.asList("Sc"));
    addPropertyAlias("Dash_Punctuation", Arrays.asList("Pd"));
    addPropertyAlias("Decimal_Number", Arrays.asList("Nd"));
    addPropertyAlias("Enclosing_Mark", Arrays.asList("Me"));
    addPropertyAlias("Final_Punctuation", Arrays.asList("Pf"));
    addPropertyAlias("Format", Arrays.asList("Cf"));
    addPropertyAlias("Initial_Punctuation", Arrays.asList("Pi"));
    addPropertyAlias("LC", Arrays.asList("Ll", "Lt", "Lu"));
    addPropertyAlias("Letter", Arrays.asList("Ll", "Lm", "Lo", "Lt", "Lu"));
    addPropertyAlias("Letter_Number", Arrays.asList("Nl"));
    addPropertyAlias("Line_Separator", Arrays.asList("Zl"));
    addPropertyAlias("Lowercase_Letter", Arrays.asList("Ll"));
    addPropertyAlias("Mark", Arrays.asList("Mc", "Me", "Mn"));
    addPropertyAlias("Math_Symbol", Arrays.asList("Sm"));
    addPropertyAlias("Modifier_Letter", Arrays.asList("Lm"));
    addPropertyAlias("Modifier_Symbol", Arrays.asList("Sk"));
    addPropertyAlias("Nonspacing_Mark", Arrays.asList("Mn"));
    addPropertyAlias("Number", Arrays.asList("Nd", "Nl", "No"));
    addPropertyAlias("Open_Punctuation", Arrays.asList("Ps"));
    addPropertyAlias("Other", Arrays.asList("Cc", "Cf", "Cn", "Co", "Cs"));
    addPropertyAlias("Other_Letter", Arrays.asList("Lo"));
    addPropertyAlias("Other_Number", Arrays.asList("No"));
    addPropertyAlias("Other_Punctuation", Arrays.asList("Po"));
    addPropertyAlias("Other_Symbol", Arrays.asList("So"));
    addPropertyAlias("Paragraph_Separator", Arrays.asList("Zp"));
    addPropertyAlias("Private_Use", Arrays.asList("Co"));
    addPropertyAlias("Punctuation", Arrays.asList("Pc", "Pd", "Pe", "Pf", "Pi", "Po", "Ps"));
    addPropertyAlias("Separator", Arrays.asList("Zl", "Zp", "Zs"));
    addPropertyAlias("Space_Separator", Arrays.asList("Zs"));
    addPropertyAlias("Spacing_Mark", Arrays.asList("Mc"));
    addPropertyAlias("Surrogate", Arrays.asList("Cs"));
    addPropertyAlias("Symbol", Arrays.asList("Sc", "Sk", "Sm", "So"));
    addPropertyAlias("Titlecase_Letter", Arrays.asList("Lt"));
    addPropertyAlias("Unassigned", Arrays.asList("Cn"));
    addPropertyAlias("Uppercase_Letter", Arrays.asList("Lu"));
  }


  // Разбито на 5 методов, так как иначе превышается максимальный размер метода.
  static {
    initBlocks();
    initStripts();
    initProperties();
    initCProperties();
    initLProperties();
    initPropertiesAliases();
  }
}
